Re: Кастомные поля в плагине pages
новое поле типа title и мета теги?
Привет!
Да, например в Друпал это реализовано через админку, можно создать любой тип материала, как например товар, или новость или фотография с подписью, просто создав соответствующий тип материалов и назначив ему поля. например, создаешь новый тип материала с полями: поле - текст, поле - строка, поле - изображение, поле - чекбокс. И в дальнейшем можешь клонировать/создавать новый тип этого материала уже с заготовленными полями для ввода.
4 2014-07-03 07:12:49 (2014-07-03 07:13:47 отредактировано ravilr)
Re: Кастомные поля в плагине pages
Для добавления хоть одного дополнительного поля, необходимо произвести не мало манипуляций с файлами плагина pages, поэтому описывать мне очень лень. Могу конечно выложить измененные файлы для 2.4.0 , но это как то неправильно.
Еще для страниц можно использовать поле теги (конечно если у вас е блог и поле не используется).
Для этого достаточно в файле
\plugins\box\pages\pages.plugin.php
например после
public static function keywords()
{
return Pages::$page['keywords'];
}добавить
public static function tags()
{
return Pages::$page['tags'];
}ну а в шаблоне выводим так
<?php echo Page::tags(); ?>
Re: Кастомные поля в плагине pages
спасибо! а не знаешь, как page сделать в формате html, а не в txt? а то для лендинга вещь бесполезная, приходится сниппеты использовать, так бы всю верстку в page вставил...
Re: Кастомные поля в плагине pages
Djin
не надо задавать вопросы в теме, которые не по теме!
Re: Кастомные поля в плагине pages
Для добавления хоть одного дополнительного поля, необходимо произвести не мало манипуляций с файлами плагина pages, поэтому описывать мне очень лень. Могу конечно выложить измененные файлы для 2.4.0 , но это как то неправильно.
Буду благодарен за такой файлик)
Re: Кастомные поля в плагине pages
Всем привет!
попытался добавить новое поле для ввода ссылки на изобр. для соц. сетей, для этого изменил код в соответствующих файлах плагина pages
в pages.admin.php, pages.plugin.php, add.view.php, edit.view.php добавил строки share_img по подобию keywords
pages.admin.php
<?php
// Add plugin navigation link
Navigation::add(__('Pages', 'pages'), 'content', 'pages', 1);
Dashboard::addNewItem('pages', __('Page', 'pages'), 'index.php?id=pages&action=add_page', 1);
// Add action on admin_pre_render hook
Action::add('admin_pre_render','PagesAdmin::_pageExpandAjax');
/**
* Pages Admin Class
*/
class PagesAdmin extends Backend
{
/**
* Pages tables
*
* @var object
*/
public static $pages = null;
/**
* _pageExpandAjax
*/
public static function _pageExpandAjax()
{
if (Request::post('page_slug')) {
if (Security::check(Request::post('token'))) {
$pages = new Table('pages');
$pages->updateWhere('[slug="'.Request::post('page_slug').'"]', array('expand' => Request::post('page_expand')));
Request::shutdown();
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
}
/**
* Pages admin function
*/
public static function main()
{
$current_theme = Option::get('theme_site_name');
$site_url = Option::get('siteurl');
$templates_path = THEMES_SITE;
$errors = array();
$pages = new Table('pages');
PagesAdmin::$pages = $pages;
$users = new Table('users');
$user = $users->select('[id='.Session::get('user_id').']', null);
// Page author
if ( ! empty($user['firstname'])) {
$author = (empty($user['lastname'])) ? $user['firstname'] : $user['firstname'].' '.$user['lastname'];
} else {
$author = Session::get('user_login');
}
$author = Html::toText($author);
// Status array
$status_array = array('published' => __('Published', 'pages'),
'draft' => __('Draft', 'pages'));
// Access array
$access_array = array('public' => __('Public', 'pages'),
'registered' => __('Registered', 'pages'));
// Check for get actions
// ---------------------------------------------
if (Request::get('action')) {
// Switch actions
// -----------------------------------------
switch (Request::get('action')) {
// Clone page
// -------------------------------------
case "clone_page":
if (Security::check(Request::get('token'))) {
// Generate rand page name
$rand_page_name = Request::get('name').'_clone_'.date("Ymd_His");
// Get original page
$orig_page = $pages->select('[slug="'.Request::get('name').'"]', null);
// Generate rand page title
$rand_page_title = $orig_page['title'].' [copy]';
// Clone page
if ($pages->insert(array('slug' => $rand_page_name,
'template' => $orig_page['template'],
'parent' => $orig_page['parent'],
'robots_index' => $orig_page['robots_index'],
'robots_follow'=> $orig_page['robots_follow'],
'status' => $orig_page['status'],
'access' => (isset($orig_page['access'])) ? $orig_page['access'] : 'public',
'expand' => (isset($orig_page['expand'])) ? $orig_page['expand'] : '0',
'title' => $rand_page_title,
'meta_title' => $orig_page['meta_title'],
'description' => $orig_page['description'],
'keywords' => $orig_page['keywords'],
'share_img' => $orig_page['share_img'],
'tags' => $orig_page['tags'],
'date' => $orig_page['date'],
'author' => $orig_page['author']))) {
// Get cloned page ID
$last_id = $pages->lastId();
// Save cloned page content
File::setContent(STORAGE . DS . 'pages' . DS . $last_id . '.page.txt',
File::getContent(STORAGE . DS . 'pages' . DS . $orig_page['id'] . '.page.txt'));
// Send notification
Notification::set('success', __('The page <i>:page</i> cloned.', 'pages', array(':page' => Security::safeName(Request::get('name'), '-', true))));
}
// Run add extra actions
Action::run('admin_pages_action_clone');
// Redirect
Request::redirect('index.php?id=pages');
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
break;
// Add page
// -------------------------------------
case "add_page":
// Add page
if (Request::post('add_page') || Request::post('add_page_and_exit')) {
if (Security::check(Request::post('csrf'))) {
// Get parent page
if (Request::post('pages') == '0') {
$parent_page = '';
} else {
$parent_page = Request::post('pages');
}
// Validate
//--------------
if (trim(Request::post('page_name')) == '') $errors['pages_empty_name'] = __('Required field', 'pages');
if (trim(Request::post('page_title')) == '') $errors['pages_empty_title'] = __('Required field', 'pages');
if (count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'"]')) != 0) $errors['pages_exists'] = __('This page already exists', 'pages');
// Prepare date
if (Valid::date(Request::post('page_date'))) {
$date = strtotime(Request::post('page_date'));
} else {
$date = time();
}
if (Request::post('robots_index')) $robots_index = 'noindex'; else $robots_index = 'index';
if (Request::post('robots_follow')) $robots_follow = 'nofollow'; else $robots_follow = 'follow';
// If no errors then try to save
if (count($errors) == 0) {
// Insert new page
if ($pages->insert(array('slug' => Security::safeName(Request::post('page_name'), '-', true),
'template' => Request::post('templates'),
'parent' => $parent_page,
'status' => Request::post('status'),
'access' => Request::post('access'),
'expand' => '0',
'robots_index' => $robots_index,
'robots_follow'=> $robots_follow,
'title' => Request::post('page_title'),
'meta_title' => Request::post('page_meta_title'),
'description' => Request::post('page_description'),
'keywords' => Request::post('page_keywords'),
'share_img' => Request::post('page_share_img'),
'tags' => Request::post('page_tags'),
'date' => $date,
'author' => $author))) {
// Get inserted page ID
$last_id = $pages->lastId();
// Save content
File::setContent(STORAGE . DS . 'pages' . DS . $last_id . '.page.txt', XML::safe(Request::post('editor')));
// Send notification
Notification::set('success', __('Your changes to the page <i>:page</i> have been saved.', 'pages', array(':page' => Security::safeName(Request::post('page_title'), '-', true))));
}
// Run add extra actions
Action::run('admin_pages_action_add');
// Redirect
if (Request::post('add_page_and_exit')) {
Request::redirect('index.php?id=pages');
} else {
Request::redirect('index.php?id=pages&action=edit_page&name='.Security::safeName(Request::post('page_name'), '-', true));
}
}
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
// Get all pages
$pages_list = $pages->select('[slug!="error404" and parent=""]');
$pages_array[] = '-none-';
foreach ($pages_list as $page) {
$pages_array[$page['slug']] = $page['title'];
}
// Get all templates
$templates_list = File::scan($templates_path, '.template.php');
foreach ($templates_list as $file) {
$templates_array[basename($file, '.template.php')] = basename($file, '.template.php');
}
// Save fields
if (Request::post('page_name')) $post_name = Request::post('page_name'); else $post_name = '';
if (Request::post('page_title')) $post_title = Request::post('page_title'); else $post_title = '';
if (Request::post('page_meta_title')) $post_meta_title = Request::post('page_meta_title'); else $post_meta_title = ''; if (Request::post('page_keywords')) $post_keywords = Request::post('page_keywords'); else $post_keywords = '';
if (Request::post('page_share_img')) $post_share_img = Request::post('page_share_img'); else $post_share_img = '';
if (Request::post('page_description')) $post_description = Request::post('page_description'); else $post_description = '';
if (Request::post('page_tags')) $post_tags = Request::post('page_tags'); else $post_tags = '';
if (Request::post('editor')) $post_content = Request::post('editor'); else $post_content = '';
if (Request::post('templates')) $post_template = Request::post('templates'); else $post_template = 'index';
if (Request::post('status')) $post_status = Request::post('status'); else $post_status = 'published';
if (Request::post('access')) $post_access = Request::post('access'); else $post_access = 'public';
if (Request::post('pages')) $parent_page = Request::post('pages'); else if(Request::get('parent_page')) $parent_page = Request::get('parent_page'); else $parent_page = '';
if (Request::post('robots_index')) $post_robots_index = true; else $post_robots_index = false;
if (Request::post('robots_follow')) $post_robots_follow = true; else $post_robots_follow = false;
//--------------
// Generate date
$date = Date::format(time(), 'Y-m-d H:i:s');
// Set Tabs State - page
Notification::setNow('page', 'page');
// Display view
View::factory('box/pages/views/backend/add')
->assign('post_name', $post_name)
->assign('post_title', $post_title)
->assign('post_meta_title', $post_meta_title)
->assign('post_description', $post_description)
->assign('post_keywords', $post_keywords)
->assign('post_share_img', $post_share_img)
->assign('post_tags', $post_tags)
->assign('post_content', $post_content)
->assign('pages_array', $pages_array)
->assign('parent_page', $parent_page)
->assign('templates_array', $templates_array)
->assign('post_template', $post_template)
->assign('post_status', $post_status)
->assign('post_access', $post_access)
->assign('status_array', $status_array)
->assign('access_array', $access_array)
->assign('date', $date)
->assign('post_robots_index', $post_robots_index)
->assign('post_robots_follow', $post_robots_follow)
->assign('errors', $errors)
->display();
break;
// Edit page
// -------------------------------------
case "edit_page":
if (Request::post('edit_page') || Request::post('edit_page_and_exit')) {
if (Security::check(Request::post('csrf'))) {
// Get pages parent
if (Request::post('pages') == '0') {
$parent_page = '';
} else {
$parent_page = Request::post('pages');
}
// Save field
$post_parent = Request::post('pages');
// Validate
//--------------
if (trim(Request::post('page_name')) == '') $errors['pages_empty_name'] = __('Required field', 'pages');
if ((count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'"]')) != 0) and (Security::safeName(Request::post('page_old_name'), '-', true) !== Security::safeName(Request::post('page_name'), '-', true))) $errors['pages_exists'] = __('This page already exists', 'pages');
if (trim(Request::post('page_title')) == '') $errors['pages_empty_title'] = __('Required field', 'pages');
// Save fields
if (Request::post('page_name')) $post_name = Request::post('page_name'); else $post_name = '';
if (Request::post('page_title')) $post_title = Request::post('page_title'); else $post_title = '';
if (Request::post('page_meta_title')) $post_meta_title = Request::post('page_meta_title'); else $post_meta_title = '';if (Request::post('page_keywords')) $post_keywords = Request::post('page_keywords'); else $post_keywords = '';
if (Request::post('page_share_img')) $post_share_img = Request::post('page_share_img'); else $post_share_img = '';
if (Request::post('page_description')) $post_description = Request::post('page_description'); else $post_description = '';
if (Request::post('page_tags')) $post_tags = Request::post('page_tags'); else $post_tags = '';
if (Request::post('editor')) $post_content = Request::post('editor'); else $post_content = '';
if (Request::post('templates')) $post_template = Request::post('templates'); else $post_template = 'index';
if (Request::post('status')) $post_status = Request::post('status'); else $post_status = 'published';
if (Request::post('access')) $post_access = Request::post('access'); else $post_access = 'public';
if (Request::post('robots_index')) $post_robots_index = true; else $post_robots_index = false;
if (Request::post('robots_follow')) $post_robots_follow = true; else $post_robots_follow = false;
//--------------
// Prepare date
if (Valid::date(Request::post('page_date'))) {
$date = strtotime(Request::post('page_date'));
} else {
$date = time();
}
if (Request::post('robots_index')) $robots_index = 'noindex'; else $robots_index = 'index';
if (Request::post('robots_follow')) $robots_follow = 'nofollow'; else $robots_follow = 'follow';
if (count($errors) == 0) {
// Update parents in all childrens
if ((Security::safeName(Request::post('page_name'), '-', true)) !== (Security::safeName(Request::post('page_old_name'), '-', true)) and (Request::post('old_parent') == '')) {
$_pages = $pages->select('[parent="'.Text::translitIt(trim(Request::post('page_old_name'))).'"]');
if ( ! empty($_pages)) {
foreach ($_pages as $_page) {
$pages->updateWhere('[parent="'.$_page['parent'].'"]', array('parent' => Security::safeName(Request::post('page_name'), '-', true)));
}
}
if ($pages->updateWhere('[slug="'.Request::get('name').'"]',
array('slug' => Security::safeName(Request::post('page_name'), '-', true),
'template' => Request::post('templates'),
'parent' => $parent_page,
'title' => Request::post('page_title'),
'meta_title' => Request::post('page_meta_title'),
'description' => Request::post('page_description'),
'keywords' => Request::post('page_keywords'),
'share_img' => Request::post('page_share_img'),
'tags' => Request::post('page_tags'),
'robots_index' => $robots_index,
'robots_follow'=> $robots_follow,
'status' => Request::post('status'),
'access' => Request::post('access'),
'date' => $date,
'author' => $author))) {
File::setContent(STORAGE . DS . 'pages' . DS . Request::post('page_id') . '.page.txt', XML::safe(Request::post('editor')));
Notification::set('success', __('Your changes to the page <i>:page</i> have been saved.', 'pages', array(':page' => Security::safeName(Request::post('page_title'), '-', true))));
}
// Run edit extra actions
Action::run('admin_pages_action_edit');
} else {
if ($pages->updateWhere('[slug="'.Request::get('name').'"]',
array('slug' => Security::safeName(Request::post('page_name'), '-', true),
'template' => Request::post('templates'),
'parent' => $parent_page,
'title' => Request::post('page_title'),
'meta_title' => Request::post('page_meta_title'),
'description' => Request::post('page_description'),
'keywords' => Request::post('page_keywords'),
'share_img' => Request::post('page_share_img'),
'tags' => Request::post('page_tags'),
'robots_index' => $robots_index,
'robots_follow'=> $robots_follow,
'status' => Request::post('status'),
'access' => Request::post('access'),
'date' => $date,
'author' => $author))) {
File::setContent(STORAGE . DS . 'pages' . DS . Request::post('page_id') . '.page.txt', XML::safe(Request::post('editor')));
Notification::set('success', __('Your changes to the page <i>:page</i> have been saved.', 'pages', array(':page' => Security::safeName(Request::post('page_title'), '-', true))));
}
// Run edit extra actions
Action::run('admin_pages_action_edit');
}
// Redirect
if (Request::post('edit_page_and_exit')) {
Request::redirect('index.php?id=pages');
} else {
Request::redirect('index.php?id=pages&action=edit_page&name='.Security::safeName(Request::post('page_name'), '-', true));
}
}
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
// Get all pages
$pages_list = $pages->select();
$pages_array[] = '-none-';
// Foreach pages find page whithout parent
foreach ($pages_list as $page) {
if (isset($page['parent'])) {
$c_p = $page['parent'];
} else {
$c_p = '';
}
if ($c_p == '') {
// error404 is system "constant" and no child for it
if ($page['slug'] !== 'error404' && $page['slug'] !== Request::get('name')) {
$pages_array[$page['slug']] = $page['title'];
}
}
}
// Get all templates
$templates_list = File::scan($templates_path,'.template.php');
foreach ($templates_list as $file) {
$templates_array[basename($file,'.template.php')] = basename($file, '.template.php');
}
$page = $pages->select('[slug="'.Request::get('name').'"]', null);
if ($page) {
$page_content = File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt');
// Safe fields or load fields
if (Request::post('page_name')) $slug_to_edit = Request::post('page_name'); else $slug_to_edit = $page['slug'];
if (Request::post('page_title')) $title_to_edit = Request::post('page_title'); else $title_to_edit = $page['title'];
if (Request::post('page_meta_title')) $meta_title_to_edit = Request::post('page_meta_title'); else $meta_title_to_edit = isset($page['meta_title']) ? $page['meta_title'] : '';
if (Request::post('page_description')) $description_to_edit = Request::post('page_description'); else $description_to_edit = $page['description'];
if (Request::post('page_keywords')) $keywords_to_edit = Request::post('page_keywords'); else $keywords_to_edit = $page['keywords'];
if (Request::post('page_share_img')) $share_img_to_edit = Request::post('page_share_img'); else $share_img_to_edit = $page['share_img'];
if (Request::post('page_tags')) $tags_to_edit = Request::post('page_tags'); else $tags_to_edit = isset($page['tags']) ? $page['tags'] : '';;
if (Request::post('editor')) $to_edit = Request::post('editor'); else $to_edit = Text::toHtml($page_content);
if (Request::post('robots_index')) $post_robots_index = true; else if ($page['robots_index'] == 'noindex') $post_robots_index = true; else $post_robots_index = false;
if (Request::post('robots_follow')) $post_robots_follow = true; else if ($page['robots_follow'] == 'nofollow') $post_robots_follow = true; else $post_robots_follow = false;
if (Request::post('pages')) {
// Get pages parent
if (Request::post('pages') == '-none-') {
$parent_page = '';
} else {
$parent_page = Request::post('pages');
}
// Save field
$parent_page = Request::post('pages');
} else {
$parent_page = $page['parent'];
}
if (Request::post('templates')) $template = Request::post('templates'); else $template = $page['template'];
if (Request::post('status')) $status = Request::post('status'); else $status = $page['status'];
if (Request::post('access')) $access = Request::post('access'); else $access = (isset($page['access'])) ? $page['access'] : 'public';
// Generate date
$date = Request::post('date') ? Request::post('date') : Date::format($page['date'], 'Y-m-d H:i:s');
Notification::setNow('page', 'page');
// Display view
View::factory('box/pages/views/backend/edit')
->assign('slug_to_edit', $slug_to_edit)
->assign('title_to_edit', $title_to_edit)
->assign('meta_title_to_edit', $meta_title_to_edit)
->assign('description_to_edit', $description_to_edit)
->assign('keywords_to_edit', $keywords_to_edit)
->assign('share_img_to_edit', $share_img_to_edit)
->assign('tags_to_edit', $tags_to_edit)
->assign('page', $page)
->assign('to_edit', $to_edit)
->assign('pages_array', $pages_array)
->assign('parent_page', $parent_page)
->assign('templates_array', $templates_array)
->assign('template', $template)
->assign('status_array', $status_array)
->assign('access_array', $access_array)
->assign('status', $status)
->assign('access', $access)
->assign('date', $date)
->assign('post_robots_index', $post_robots_index)
->assign('post_robots_follow', $post_robots_follow)
->assign('errors', $errors)
->display();
}
break;
// Delete page
// -------------------------------------
case "delete_page":
// Error 404 page can not be removed
if (Request::get('slug') !== 'error404') {
if (Security::check(Request::get('token'))) {
// Get specific page
$page = $pages->select('[slug="'.Request::get('name').'"]', null);
// Delete page and update <parent> fields
if ($pages->deleteWhere('[slug="'.$page['slug'].'" ]')) {
$_pages = $pages->select('[parent="'.$page['slug'].'"]');
if ( ! empty($_pages)) {
foreach ($_pages as $_page) {
$pages->updateWhere('[slug="'.$_page['slug'].'"]', array('parent' => ''));
}
}
File::delete(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt');
Notification::set('success', __('Page <i>:page</i> deleted', 'pages', array(':page' => Html::toText($page['title']))));
}
// Run delete extra actions
Action::run('admin_pages_action_delete');
// Redirect
Request::redirect('index.php?id=pages');
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
break;
// Update page access
// -------------------------------------
case "update_access":
if (Request::get('slug') !== 'error404') {
if (Security::check(Request::get('token'))) {
$pages->updateWhere('[slug="'.Request::get('slug').'"]', array('access' => Request::get('access')));
// Run delete extra actions
Action::run('admin_pages_action_update_access');
// Send notification
Notification::set('success', __('Your changes to the page <i>:page</i> have been saved.', 'pages', array(':page' => Request::get('slug'))));
// Redirect
Request::redirect('index.php?id=pages');
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
break;
// Update page status
// -------------------------------------
case "update_status":
if (Request::get('name') !== 'error404') {
if (Security::check(Request::get('token'))) {
$pages->updateWhere('[slug="'.Request::get('slug').'"]', array('status' => Request::get('status')));
// Run delete extra actions
Action::run('admin_pages_action_update_status');
// Send notification
Notification::set('success', __('Your changes to the page <i>:page</i> have been saved.', 'pages', array(':page' => Request::get('slug'))));
// Redirect
Request::redirect('index.php?id=pages');
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
break;
}
// Its mean that you can add your own actions for this plugin
Action::run('admin_pages_extra_actions');
} else {
// Index action
// -------------------------------------
// Init vars
$pages_array = array();
$count = 0;
// Get pages
$pages_list = $pages->select(null, 'all', null, array('slug', 'title', 'status', 'date', 'author', 'expand', 'access', 'parent', 'template', 'tags'));
// Loop
foreach ($pages_list as $page) {
$pages_array[$count]['title'] = $page['title'];
$pages_array[$count]['meta_title'] = isset($page['meta_title']) ? $page['meta_title'] : '';
$pages_array[$count]['parent'] = $page['parent'];
$pages_array[$count]['_status'] = $page['status'];
$pages_array[$count]['_access'] = $page['access'];
$pages_array[$count]['status'] = $status_array[$page['status']];
$pages_array[$count]['access'] = isset($access_array[$page['access']]) ? $access_array[$page['access']] : $access_array['public']; // hack for old Monstra Versions
$pages_array[$count]['date'] = $page['date'];
$pages_array[$count]['author'] = $page['author'];
$pages_array[$count]['expand'] = $page['expand'];
$pages_array[$count]['slug'] = $page['slug'];
$pages_array[$count]['tags'] = $page['tags'];
$pages_array[$count]['template']= $page['template'];
if (isset($page['parent'])) {
$c_p = $page['parent'];
} else {
$c_p = '';
}
if ($c_p != '') {
$_page = $pages->select('[slug="'.$page['parent'].'"]', null);
if (isset($_page['title'])) {
$_title = $_page['title'];
} else {
$_title = '';
}
$pages_array[$count]['sort'] = $_title . ' ' . $page['title'];
} else {
$pages_array[$count]['sort'] = $page['title'];
}
$_title = '';
$count++;
}
// Sort pages
$pages = Arr::subvalSort($pages_array, 'sort');
// Display view
View::factory('box/pages/views/backend/index')
->assign('pages', $pages)
->assign('site_url', $site_url)
->display();
}
}
}pages.plugin.php
<?php
/**
* Pages plugin
*
* @package Monstra
* @subpackage Plugins
* @author Romanenko Sergey / Awilum
* @copyright 2012-2014 Romanenko Sergey / Awilum
* @version 1.0.0
*
*/
// Register plugin
Plugin::register( __FILE__,
__('Pages' , 'pages'),
__('Pages manager', 'pages'),
'1.0.0',
'Awilum',
'http://monstra.org/',
'pages',
'box');
if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor'))) {
// Include Admin
Plugin::Admin('pages', 'box');
}
// Add Plugin Javascript
Javascript::add('../../../post/8567/plugins/box/pages/js/ru.forum_subdomain/pages.js', 'backend');
/**
* Pages Class
*/
class Pages extends Frontend
{
/**
* Current page data
*
* @var object
*/
public static $page = null;
/**
* Pages tables
*
* @var object
*/
public static $pages = null;
/**
* Requested page
*
* @var string
*/
public static $requested_page = null;
/**
* Main function
*/
public static function main()
{
Pages::$pages = new Table('pages');
Pages::$page = Pages::pageLoader();
}
/**
* Page loader
*
* @param boolean $return_data data
* @return array
*/
public static function pageLoader($return_data = true)
{
$requested_page = Pages::lowLoader(Uri::segments());
Pages::$requested_page = $requested_page;
return Pages::$pages->select('[slug="'.$requested_page.'"]', null);
}
/**
* Load current page
*
* @global string $defpage default page
* @param array $data uri
* @return string
*/
public static function lowLoader($data)
{
$defpage = Option::get('defaultpage');
// If data count 2 then it has Parent/Child
if (count($data) >= 2) {
// If exists parent file
if (count(Pages::$pages->select('[slug="'.$data[0].'"]')) !== 0) {
// Get child file and get parent page name
$child_page = Pages::$pages->select('[slug="'.$data[1].'"]', null);
// If child page parent is not empty then get his parent
if (count($child_page) == 0) {
$c_p = '';
} else {
if ($child_page['parent'] != '') {
$c_p = $child_page['parent'];
} else {
$c_p = '';
}
}
// Hack For old Monstra
$child_page['access'] = (isset($child_page['access'])) ? $child_page['access'] : 'public' ;
// Check is child_parent -> request parent
if ($c_p == $data[0]) {
if (count($data) < 3) { // Checking only for the parent and one child, the remaining issue 404
if ((($child_page['status'] == 'published') or
(Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor')))) and
($child_page['access'] == 'public')) {
$id = $data[1];
} elseif (($child_page['access'] == 'registered') and
(Session::exists('user_id')) and
($child_page['status'] == 'published')) {
$id = $data[1];
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
} else { // Only parent page come
if (empty($data[0])) {
$id = $defpage;
} else {
// Get current page
$current_page = Pages::$pages->select('[slug="'.$data[0].'"]', null);
// Hack For old Monstra
$current_page['access'] = (isset($current_page['access'])) ? $current_page['access'] : 'public' ;
if (count($current_page) != 0) {
if ( ! empty($current_page['parent'])) {
$c_p = $current_page['parent'];
} else {
$c_p = '';
}
} else {
$c_p = '';
}
// Check if this page has parent
if ($c_p !== '') {
if ($c_p == $data[0]) {
if (count(Pages::$pages->select('[slug="'.$data[0].'"]', null)) != 0) {
if ((($current_page['status'] == 'published') or
(Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor')))) and
($current_page['access'] == 'public')) {
$id = $data[0];
} elseif (($current_page['access'] == 'registered') and
(Session::exists('user_id')) and
($current_page['status'] == 'published')) {
$id = $data[0];
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
} else {
if (count(Pages::$pages->select('[slug="'.$data[0].'"]', null)) != 0) {
if ((($current_page['status'] == 'published') or
(Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor')))) and
($current_page['access'] == 'public')) {
$id = $data[0];
} elseif (($current_page['access'] == 'registered') and
(Session::exists('user_id')) and
($current_page['status'] == 'published')) {
$id = $data[0];
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
}
}
}
// Return page name/id to load
return $id;
}
/**
* Get pages template
*
* @return string
*/
public static function template()
{
if (Pages::$page['template'] == '') return 'index'; else return Pages::$page['template'];
}
/**
* Get pages contents
*
* @return string
*/
public static function content($slug = '')
{
if ( ! empty($slug)) {
$page = Table::factory('pages')->select('[slug="'.$slug.'"]', null);
if ( ! empty($page)) {
$content = Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt'));
$content = Filter::apply('content', $content);
return $content;
} else {
return '';
}
} else {
return Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . Pages::$page['id'] . '.page.txt'));
}
}
/**
* Get pages title
*
* <code>
* echo Page::title();
* </code>
*
* @return string
*/
public static function title()
{
return !empty(Pages::$page['meta_title']) ? Pages::$page['meta_title'] : Pages::$page['title'];
}
/**
* Get pages Description
*
* <code>
* echo Page::description();
* </code>
*
* @return string
*/
public static function description()
{
return Pages::$page['description'];
}
/**
* Get pages Keywords
*
* <code>
* echo Page::keywords();
* </code>
*
* @return string
*/
public static function keywords()
{
return Pages::$page['keywords'];
}
/**
* Get pages Share images
*
* <code>
* echo Page::share_img();
* </code>
*
* @return string
*/
public static function share_img()
{
return Pages::$page['share_img'];
}
/**
* Get pages
*/
public static function getPages()
{
// Init vars
$pages_array = array();
$count = 0;
// Get pages table
$pages = new Table('pages');
// Get Pages List
$pages_list = $pages->select('[slug!="error404" and status="published"]');
foreach ($pages_list as $page) {
$pages_array[$count]['title'] = Html::toText($page['title']);
$pages_array[$count]['meta_title'] = !empty($page['meta_title']) ? Html::toText($page['meta_title']) : $page['title'];
$pages_array[$count]['parent'] = $page['parent'];
$pages_array[$count]['date'] = $page['date'];
$pages_array[$count]['author'] = $page['author'];
$pages_array[$count]['slug'] = ($page['slug'] == Option::get('defaultpage')) ? '' : $page['slug'] ;
if (isset($page['parent'])) {
$c_p = $page['parent'];
} else {
$c_p = '';
}
if ($c_p != '') {
$_page = $pages->select('[slug="'.$page['parent'].'"]', null);
if (isset($_page['title'])) {
$_title = $_page['title'];
} else {
$_title = '';
}
$pages_array[$count]['sort'] = $_title . ' ' . $page['title'];
} else {
$pages_array[$count]['sort'] = $page['title'];
}
$_title = '';
$count++;
}
// Sort pages
$_pages_list = Arr::subvalSort($pages_array, 'sort');
// return
return $_pages_list;
}
}
/**
* Page class
*/
class Page extends Pages
{
/**
* Get date of current page
*
* <code>
* echo Page::date();
* </code>
*
* @param string $format Date format
* @return string
*/
public static function date($format = 'Y-m-d')
{
return Date::format(Pages::$page['date'], $format);
}
/**
* Get author of current page
*
* <code>
* echo Page::author();
* </code>
*
* @return string
*/
public static function author()
{
return Pages::$page['author'];
}
/**
* Get children pages for a specific parent page
*
* <code>
* $pages = Page::children('page');
* </code>
*
* @param string $parent Parent page
* @return array
*/
public static function children($parent)
{
return Pages::$pages->select('[parent="'.(string) $parent.'"]', 'all');
}
/**
* Get the available children pages for requested page.
*
* <code>
* echo Page::available();
* </code>
*
*/
public static function available()
{
$pages = Pages::$pages->select('[parent="'.Pages::$requested_page.'"]', 'all');
// Display view
View::factory('box/pages/views/frontend/available_pages')
->assign('pages', $pages)
->display();
}
/**
* Get page breadcrumbs
*
* <code>
* echo Page::breadcrumbs();
* </code>
*
*/
public static function breadcrumbs()
{
if (Uri::command() == 'pages') {
$current_page = Pages::$requested_page;
$parent_page = '';
if ($current_page !== 'error404') {
$page = Pages::$pages->select('[slug="'.$current_page.'"]', null);
if (trim($page['parent']) !== '') {
$parent = true;
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'"]', null);
} else {
$parent = false;
}
// Display view
View::factory('box/pages/views/frontend/breadcrumbs')
->assign('current_page', $current_page)
->assign('page', $page)
->assign('parent', $parent)
->assign('parent_page', $parent_page)
->display();
}
}
}
/**
* Get page url
*
* <code>
* echo Page::url();
* </code>
*
*/
public static function url()
{
return Option::get('siteurl').'/'.Pages::$page['slug'];
}
/**
* Get page slug
*
* <code>
* echo Page::slug();
* </code>
*
*/
public static function slug()
{
return Pages::$page['slug'];
}
/**
* Get page meta robots
*
* <code>
* echo Page::robots();
* </code>
*
*/
public static function robots()
{
if (Pages::$page !== null) {
$_index = (isset(Pages::$page['robots_index'])) ? Pages::$page['robots_index'] : '';
$_follow = (isset(Pages::$page['robots_follow'])) ? Pages::$page['robots_follow'] : '';
$robots = ( ! empty($_index) && ! empty($_follow)) ? $_index.', '.$_follow : '';
} else {
$robots = '';
}
return $robots;
}
public static function _date($attributes)
{
return Page::date((isset($attributes['format'])) ? $attributes['format'] : 'Y-m-d');
}
public static function _content($attributes)
{
return Pages::content((isset($attributes['name']) ? $attributes['name'] : ''));
}
}
/**
* Add new shortcodes {page_author} {page_slug} {page_url} {page_date} {page_content}
*/
Shortcode::add('page_author', 'Page::author');
Shortcode::add('page_slug', 'Page::slug');
Shortcode::add('page_url', 'Page::url');
Shortcode::add('page_content', 'Page::_content');
Shortcode::add('page_date', 'Page::_date');Re: Кастомные поля в плагине pages
add.view.php
<h2 class="margin-bottom-1"><?php echo __('New Page', 'pages'); ?></h2>
<?php
echo (
Form::open().
Form::hidden('csrf', Security::token())
);
?>
<ul class="nav nav-tabs">
<li <?php if (Notification::get('page')) { ?>class="active"<?php } ?>><a href="#page" data-toggle="tab"><?php echo __('Page', 'pages'); ?></a></li>
<li <?php if (Notification::get('metadata')) { ?>class="active"<?php } ?>><a href="#metadata" data-toggle="tab"><?php echo __('Metadata', 'pages'); ?></a></li>
<li <?php if (Notification::get('settings')) { ?>class="active"<?php } ?>><a href="#settings" data-toggle="tab"><?php echo __('Settings', 'pages'); ?></a></li>
</ul>
<div class="tab-content tab-page margin-bottom-1">
<div class="tab-pane <?php if (Notification::get('page')) { ?>active<?php } ?>" id="page">
<div class="form-group">
<?php
echo (
Form::label('page_title', __('Name', 'pages')).
Form::input('page_title', $post_title, array('class' => (isset($errors['pages_empty_title'])) ? 'form-control error-field' : 'form-control'))
);
if (isset($errors['pages_empty_title'])) echo Html::nbsp(3).'<span class="error-message">'.$errors['pages_empty_title'].'</span>';
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('page_name', __('Slug (url)', 'pages')).
Form::input('page_name', $post_name, array('class' => (isset($errors['pages_empty_name'])) ? 'form-control error-field' : 'form-control'))
);
if (isset($errors['pages_exists'])) echo '<span class="error-message">'.$errors['pages_exists'].'</span>';
if (isset($errors['pages_empty_name'])) echo '<span class="error-message">'.$errors['pages_empty_name'].'</span>';
?>
</div>
</div>
<div class="tab-pane <?php if (Notification::get('metadata')) { ?>active<?php } ?>" id="metadata">
<div class="form-group">
<?php
echo (
Form::label('page_meta_title', __('Title', 'pages')).
Form::input('page_meta_title', $post_meta_title, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('page_keywords', __('Keywords', 'pages')).
Form::input('page_keywords', $post_keywords, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('page_description', __('Description', 'pages')).
Form::textarea('page_description', $post_description, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('page_share_img', __('Picture for social networking', 'pages')).
Form::input('page_share_img', $post_share_img, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('robots', __('Search Engines Robots', 'pages')).
Html::br(1).
'no Index'.Html::nbsp().Form::checkbox('robots_index', 'index', $post_robots_index).Html::nbsp(2).
'no Follow'.Html::nbsp().Form::checkbox('robots_follow', 'follow', $post_robots_follow)
);
?>
</div>
</div>
<div class="tab-pane <?php if (Notification::get('settings')) { ?>active<?php } ?>" id="settings">
<div class="form-group">
<?php
echo (
Form::label('pages', __('Parent', 'pages')).
Form::select('pages', $pages_array, $parent_page, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('templates', __('Template', 'pages')).
Form::select('templates', $templates_array, $post_template, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('status', __('Status', 'pages')).
Form::select('status', $status_array, $post_status, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('access', __('Access', 'pages')).
Form::select('access', $access_array, $post_access, array('class' => 'form-control'))
);
?>
</div>
</div>
</div>
<div class="row margin-bottom-1">
<div class="col-xs-12">
<?php Action::run('admin_editor', array(Html::toText($post_content))); ?>
</div>
</div>
<div class="row margin-top-1">
<div class="col-xs-12">
<div class="form-group">
<div class="input-group">
<?php
echo (
Form::input('page_tags', $post_tags, array('class' => 'form-control'))
);
?>
<span class="input-group-addon add-on">
<?php echo __('Tags', 'pages'); ?>
</span>
</div>
</div>
</div>
</div>
<div class="row margin-top-1">
<div class="col-sm-6">
<?php
echo (
Form::submit('add_page_and_exit', __('Save and Exit', 'pages'), array('class' => 'btn btn-phone btn-primary')).Html::nbsp(2).
Form::submit('add_page', __('Save', 'pages'), array('class' => 'btn btn-phone btn-primary')).Html::nbsp(2).
Html::anchor(__('Cancel', 'pages'), 'index.php?id=pages', array('title' => __('Cancel', 'pages'), 'class' => 'btn btn-phone btn-default'))
);
?>
</div>
<div class="col-sm-6 visible-sm visible-md visible-lg">
<div class="pull-right">
<div class="input-group datapicker">
<?php echo Form::input('page_date', $date, array('class' => 'form-control')); ?>
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<?php echo Form::close(); ?>
</div>
</div>edit.view.php
<h2 class="margin-bottom-1"><?php if (Request::get('name') == 'error404') { echo __('Edit 404 Page', 'pages'); } else { echo __('Edit Page', 'pages'); } ?></h2>
<?php
echo (
Form::open().
Form::hidden('csrf', Security::token()).
Form::hidden('page_old_name', Request::get('name')).
Form::hidden('old_parent', $page['parent']).
Form::hidden('page_id', $page['id'])
);
?>
<ul class="nav nav-tabs">
<li <?php if (Notification::get('page')) { ?>class="active"<?php } ?>><a href="#page" data-toggle="tab"><?php echo __('Page', 'pages'); ?></a></li>
<li <?php if (Notification::get('metadata')) { ?>class="active"<?php } ?>><a href="#metadata" data-toggle="tab"><?php echo __('Metadata', 'pages'); ?></a></li>
<li <?php if (Notification::get('settings')) { ?>class="active"<?php } ?>><a href="#settings" data-toggle="tab"><?php echo __('Settings', 'pages'); ?></a></li>
</ul>
<div class="tab-content tab-page margin-bottom-1">
<div class="tab-pane <?php if (Notification::get('page')) { ?>active<?php } ?>" id="page">
<div class="form-group">
<?php
echo (
Form::label('page_title', __('Name', 'pages')).
Form::input('page_title', $title_to_edit, array('class' => (isset($errors['pages_empty_title'])) ? 'form-control error-field' : 'form-control'))
);
if (isset($errors['pages_empty_title'])) echo '<span class="error-message">'.$errors['pages_empty_title'].'</span>';
?>
</div>
<div class="form-group">
<?php
if (Request::get('name') !== 'error404') {
echo (
Form::label('page_name', __('Slug (url)', 'pages'))
);
}
if (Request::get('name') == 'error404') {
echo Form::hidden('page_name', $slug_to_edit);
} else {
echo (
Form::input('page_name', $slug_to_edit, array('class' => (isset($errors['pages_empty_name'])) ? 'form-control error-field' : 'form-control'))
);
}
if (isset($errors['pages_empty_name'])) echo '<span class="error-message">'.$errors['pages_empty_name'].'</span>';
if (isset($errors['pages_exists'])) echo '<span class="error-message">'.$errors['pages_exists'].'</span>';
?>
</div>
</div>
<div class="tab-pane <?php if (Notification::get('metadata')) { ?>active<?php } ?>" id="metadata">
<div class="form-group">
<?php
echo (
Form::label('page_meta_title', __('Title', 'pages')).
Form::input('page_meta_title', $meta_title_to_edit, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('page_keywords', __('Keywords', 'pages')).
Form::input('page_keywords', $keywords_to_edit, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo(
Form::label('page_description', __('Description', 'pages')).
Form::textarea('page_description', $description_to_edit, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('page_share_img', __('Picture for social networking', 'pages')).
Form::input('page_share_img', $post_share_img, array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('robots', __('Search Engines Robots', 'pages')).
Html::br(1).
'no Index'.Html::nbsp().Form::checkbox('robots_index', 'index', $post_robots_index).Html::nbsp(2).
'no Follow'.Html::nbsp().Form::checkbox('robots_follow', 'follow', $post_robots_follow)
);
?>
</div>
</div>
<div class="tab-pane <?php if (Notification::get('settings')) { ?>active<?php } ?>" id="settings">
<?php
if (Request::get('name') == 'error404') {
echo Form::hidden('pages', $parent_page);
} else {
?>
<div class="form-group">
<?php
echo (
Form::label('pages', __('Parent', 'pages')).
Form::select('pages', $pages_array, $parent_page, array('class' => 'form-control'))
);
?>
</div>
<?php } ?>
<?php if (Request::get('name') != 'error404') { ?>
<div class="form-group">
<?php } else { ?>
<div>
<?php } ?>
<?php
echo (
Form::label('templates', __('Template', 'pages')).
Form::select('templates', $templates_array, $template, array('class' => 'form-control'))
);
?>
</div>
<?php
if (Request::get('name') == 'error404') {
echo Form::hidden('status', $status);
} else {
?>
<div class="form-group">
<?php
echo (
Form::label('status', __('Status', 'pages')).
Form::select('status', $status_array, $status, array('class' => 'form-control'))
);
?>
</div>
<?php } ?>
<?php
if (Request::get('name') == 'error404') {
echo Form::hidden('access', $access);
} else {
?>
<div class="form-group">
<?php
echo (
Form::label('access', __('Access', 'pages')).
Form::select('access', $access_array, $access, array('class' => 'form-control'))
);
?>
</div>
<?php } ?>
</div>
</div>
<div class="row margin-bottom-1">
<div class="col-xs-12">
<?php Action::run('admin_editor', array(Html::toText($to_edit))); ?>
</div>
</div>
<div class="row margin-top-1">
<div class="col-xs-12">
<div class="form-group">
<div class="input-group">
<?php
echo (
Form::input('page_tags', $tags_to_edit, array('class' => 'form-control'))
);
?>
<span class="input-group-addon add-on">
<?php echo __('Tags', 'pages'); ?>
</span>
</div>
</div>
</div>
</div>
<div class="row margin-top-1">
<div class="col-sm-6">
<?php
echo (
Form::submit('edit_page_and_exit', __('Save and Exit', 'pages'), array('class' => 'btn btn-phone btn-primary')).Html::nbsp(2).
Form::submit('edit_page', __('Save', 'pages'), array('class' => 'btn btn-phone btn-primary')).Html::nbsp(2).
Html::anchor(__('Cancel', 'pages'), 'index.php?id=pages', array('title' => __('Cancel', 'pages'), 'class' => 'btn btn-phone btn-default'))
);
?>
</div>
<div class="col-sm-6 visible-sm visible-md visible-lg">
<div class="pull-right">
<div class="input-group datapicker">
<?php echo Form::input('page_date', $date, array('class' => 'form-control')); ?>
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<?php echo Form::close(); ?>
</div>
</div>ну и соответственно внес изменения в языковые файлы плагина.
В итоге доп. поле появилось, а сохранять наотрез перестало - создать страницу или внести изменения в существующую невозможно. Други!, может кто более опытным взглядом глянет на код, может что то неправильно прописал или еще где то чего то надо дописать ...
За ранее благодарен ...
10 2014-09-10 16:27:24 (2014-09-10 16:32:36 отредактировано KANekT)
Re: Кастомные поля в плагине pages
а вы сделали апдейтер который в базу это поле добавляет ?
// Pages Table: add new fields
$pages = new Table('pages');
$pages->addField('meta_title');
$pages->addField('tags');Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0
Re: Кастомные поля в плагине pages
нет, вопрос а как его делать?, я особо не селен в пхп, только учу ...
Re: Кастомные поля в плагине pages
Re: Кастомные поля в плагине pages
и чем полезен ваш коммент - кода примера нет!
Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0
