1
0
mirror of https://github.com/monstra-cms/monstra.git synced 2025-08-03 03:37:52 +02:00

Improved Menu Plugin #11

This commit is contained in:
Awilum
2012-10-02 21:25:22 +03:00
parent b8ad9ba3d8
commit e3ae8cecc8
7 changed files with 181 additions and 52 deletions

View File

@@ -15,10 +15,12 @@
'Item order' => 'Item order', 'Item order' => 'Item order',
'Item target' => 'Item target', 'Item target' => 'Item target',
'Item link' => 'Item link', 'Item link' => 'Item link',
'Item category' => 'Item category',
'Save' => 'Save', 'Save' => 'Save',
'Edit item' => 'Edit item', 'Edit item' => 'Edit item',
'Delete item :name' => 'Delete item :name', 'Delete item :name' => 'Delete item :name',
'Add page' => 'Add page',
'Select page' => 'Select page', 'Select page' => 'Select page',
'Category' => 'Category',
'Select category' => 'Select category',
) )
); );

View File

@@ -15,10 +15,12 @@
'Item order' => 'Порядок', 'Item order' => 'Порядок',
'Item target' => 'Цель', 'Item target' => 'Цель',
'Item link' => 'Ссылка', 'Item link' => 'Ссылка',
'Item category' => 'Категория',
'Save' => 'Сохранить', 'Save' => 'Сохранить',
'Edit item' => 'Редактирование пункта меню', 'Edit item' => 'Редактирование пункта меню',
'Delete item :name' => 'Удалить пункт меню :name', 'Delete item :name' => 'Удалить пункт меню :name',
'Add page' => 'Добавить страницу',
'Select page' => 'Выбрать страницу', 'Select page' => 'Выбрать страницу',
'Category' => 'Категория',
'Select category' => 'Выбрать категорию',
) )
); );

View File

@@ -3,26 +3,45 @@
// Add plugin navigation link // Add plugin navigation link
Navigation::add(__('Menu', 'menu'), 'content', 'menu', 3); Navigation::add(__('Menu', 'menu'), 'content', 'menu', 3);
Action::add('admin_header', 'menuAdminHeaders'); Action::add('admin_header', 'MenuAdmin::headers');
function menuAdminHeaders() {
echo ("
<script>
function addMenuPage(slug, title) {
$('input[name=menu_item_link]').val(slug);
$('input[name=menu_item_name]').val(title);
$('#addMenuPageModal').modal('hide');
}
</script>
");
}
class MenuAdmin extends Backend { class MenuAdmin extends Backend {
/**
* Menu table
*
* @var object
*/
public static $menu = null;
/**
* Headers
*/
public static function headers() {
echo ("
<script>
function selectPage(slug, title) {
$('input[name=menu_item_link]').val(slug);
$('input[name=menu_item_name]').val(title);
$('#selectPageModal').modal('hide');
}
function selectCategory(name) {
$('input[name=menu_item_category]').val(name);
$('#selectCategoryModal').modal('hide');
}
</script>
");
}
public static function main() { public static function main() {
// Get menu table // Get menu table
$menu = new Table('menu'); MenuAdmin::$menu = new Table('menu');
// Get pages table // Get pages table
$pages = new Table('pages'); $pages = new Table('pages');
@@ -50,12 +69,13 @@
case "edit": case "edit":
// Select item // Select item
$item = $menu->select('[id="'.Request::get('item_id').'"]', null); $item = MenuAdmin::$menu->select('[id="'.Request::get('item_id').'"]', null);
$menu_item_name = $item['name']; $menu_item_name = $item['name'];
$menu_item_link = $item['link']; $menu_item_link = $item['link'];
$menu_item_target = $item['target']; $menu_item_category = $item['category'];
$menu_item_order = $item['order']; $menu_item_target = $item['target'];
$menu_item_order = $item['order'];
$errors = array(); $errors = array();
@@ -68,6 +88,7 @@
if (Request::post('menu_item_name')) $menu_item_name = Request::post('menu_item_name'); else $menu_item_name = $item['name']; if (Request::post('menu_item_name')) $menu_item_name = Request::post('menu_item_name'); else $menu_item_name = $item['name'];
if (Request::post('menu_item_link')) $menu_item_link = Request::post('menu_item_link'); else $menu_item_link = $item['link']; if (Request::post('menu_item_link')) $menu_item_link = Request::post('menu_item_link'); else $menu_item_link = $item['link'];
if (Request::post('menu_item_category')) $menu_item_category = Request::post('menu_item_category'); else $menu_item_category = $item['category'];
if (Request::post('menu_item_target')) $menu_item_target = Request::post('menu_item_target'); else $menu_item_target = $item['target']; if (Request::post('menu_item_target')) $menu_item_target = Request::post('menu_item_target'); else $menu_item_target = $item['target'];
if (Request::post('menu_item_order')) $menu_item_order = Request::post('menu_item_order'); else $menu_item_order = $item['order']; if (Request::post('menu_item_order')) $menu_item_order = Request::post('menu_item_order'); else $menu_item_order = $item['order'];
@@ -76,10 +97,11 @@
// Update menu item // Update menu item
if (count($errors) == 0) { if (count($errors) == 0) {
$menu->update(Request::get('item_id'), array('name' => Request::post('menu_item_name'), MenuAdmin::$menu->update(Request::get('item_id'), array('name' => Request::post('menu_item_name'),
'link' => Request::post('menu_item_link'), 'link' => Request::post('menu_item_link'),
'target' => Request::post('menu_item_target'), 'category' => Security::safeName(Request::post('menu_item_category'), '-', true),
'order' => Request::post('menu_item_order'))); 'target' => Request::post('menu_item_target'),
'order' => Request::post('menu_item_order')));
Request::redirect('index.php?id=menu'); Request::redirect('index.php?id=menu');
} }
@@ -92,11 +114,13 @@
View::factory('box/menu/views/backend/edit') View::factory('box/menu/views/backend/edit')
->assign('menu_item_name', $menu_item_name) ->assign('menu_item_name', $menu_item_name)
->assign('menu_item_link', $menu_item_link) ->assign('menu_item_link', $menu_item_link)
->assign('menu_item_category', $menu_item_category)
->assign('menu_item_target', $menu_item_target) ->assign('menu_item_target', $menu_item_target)
->assign('menu_item_order', $menu_item_order) ->assign('menu_item_order', $menu_item_order)
->assign('menu_item_target_array', $menu_item_target_array) ->assign('menu_item_target_array', $menu_item_target_array)
->assign('menu_item_order_array', $menu_item_order_array) ->assign('menu_item_order_array', $menu_item_order_array)
->assign('errors', $errors) ->assign('errors', $errors)
->assign('categories', MenuAdmin::getCategories())
->assign('pages_list', $pages->select('[slug!="error404" and parent=""]')) ->assign('pages_list', $pages->select('[slug!="error404" and parent=""]'))
->assign('components_list', MenuAdmin::getComponents()) ->assign('components_list', MenuAdmin::getComponents())
->display(); ->display();
@@ -110,6 +134,7 @@
$menu_item_name = ''; $menu_item_name = '';
$menu_item_link = ''; $menu_item_link = '';
$menu_item_category = '';
$menu_item_target = ''; $menu_item_target = '';
$menu_item_order = ''; $menu_item_order = '';
$errors = array(); $errors = array();
@@ -123,6 +148,7 @@
if (Request::post('menu_item_name')) $menu_item_name = Request::post('menu_item_name'); else $menu_item_name = ''; if (Request::post('menu_item_name')) $menu_item_name = Request::post('menu_item_name'); else $menu_item_name = '';
if (Request::post('menu_item_link')) $menu_item_link = Request::post('menu_item_link'); else $menu_item_link = ''; if (Request::post('menu_item_link')) $menu_item_link = Request::post('menu_item_link'); else $menu_item_link = '';
if (Request::post('menu_item_category')) $menu_item_category = Request::post('menu_item_category'); else $menu_item_category = '';
if (Request::post('menu_item_target')) $menu_item_target = Request::post('menu_item_target'); else $menu_item_target = ''; if (Request::post('menu_item_target')) $menu_item_target = Request::post('menu_item_target'); else $menu_item_target = '';
if (Request::post('menu_item_order')) $menu_item_order = Request::post('menu_item_order'); else $menu_item_order = ''; if (Request::post('menu_item_order')) $menu_item_order = Request::post('menu_item_order'); else $menu_item_order = '';
@@ -131,10 +157,11 @@
// Insert new menu item // Insert new menu item
if (count($errors) == 0) { if (count($errors) == 0) {
$menu->insert(array('name' => Request::post('menu_item_name'), MenuAdmin::$menu->insert(array('name' => Request::post('menu_item_name'),
'link' => Request::post('menu_item_link'), 'link' => Request::post('menu_item_link'),
'target' => Request::post('menu_item_target'), 'category' => Security::safeName(Request::post('menu_item_category'), '-', true),
'order' => Request::post('menu_item_order'))); 'target' => Request::post('menu_item_target'),
'order' => Request::post('menu_item_order')));
Request::redirect('index.php?id=menu'); Request::redirect('index.php?id=menu');
} }
@@ -142,16 +169,18 @@
} else { die('csrf detected!'); } } else { die('csrf detected!'); }
} }
// Display view // Display view
View::factory('box/menu/views/backend/add') View::factory('box/menu/views/backend/add')
->assign('menu_item_name', $menu_item_name) ->assign('menu_item_name', $menu_item_name)
->assign('menu_item_link', $menu_item_link) ->assign('menu_item_link', $menu_item_link)
->assign('menu_item_category', $menu_item_category)
->assign('menu_item_target', $menu_item_target) ->assign('menu_item_target', $menu_item_target)
->assign('menu_item_order', $menu_item_order) ->assign('menu_item_order', $menu_item_order)
->assign('menu_item_target_array', $menu_item_target_array) ->assign('menu_item_target_array', $menu_item_target_array)
->assign('menu_item_order_array', $menu_item_order_array) ->assign('menu_item_order_array', $menu_item_order_array)
->assign('errors', $errors) ->assign('errors', $errors)
->assign('categories', MenuAdmin::getCategories())
->assign('pages_list', $pages->select('[slug!="error404" and parent=""]')) ->assign('pages_list', $pages->select('[slug!="error404" and parent=""]'))
->assign('components_list', MenuAdmin::getComponents()) ->assign('components_list', MenuAdmin::getComponents())
->display(); ->display();
@@ -163,18 +192,36 @@
// Delete menu item // Delete menu item
if (Request::get('delete_item')) { if (Request::get('delete_item')) {
$menu->delete((int)Request::get('delete_item')); MenuAdmin::$menu->delete((int)Request::get('delete_item'));
} }
// Display view // Display view
View::factory('box/menu/views/backend/index') View::factory('box/menu/views/backend/index')
->assign('items', $menu->select(null, 'all', null, array('id', 'name', 'link', 'target', 'order'), 'order', 'ASC')) ->assign('categories', MenuAdmin::getCategories())
->assign('menu', MenuAdmin::$menu)
->display(); ->display();
} }
} }
/**
* Get categories
*/
public static function getCategories() {
$categories = array();
$_categories = MenuAdmin::$menu->select(null, 'all', null, array('category'));
foreach($_categories as $category) {
$categories[] = $category['category'];
}
return array_unique($categories);
}
/** /**
* Get components * Get components

View File

@@ -33,14 +33,20 @@
class Menu { class Menu {
public static function get() {
/**
* Get menu
*
* @param string $category Category name
*/
public static function get($category = '') {
// Get menu table // Get menu table
$menu = new Table('menu'); $menu = new Table('menu');
// Display view // Display view
View::factory('box/menu/views/frontend/index') View::factory('box/menu/views/frontend/index')
->assign('items', $menu->select(null, 'all', null, array('id', 'name', 'link', 'target', 'order'), 'order', 'ASC')) ->assign('items', $menu->select('[category="'.$category.'"]', 'all', null, array('id', 'name', 'link', 'target', 'order', 'category'), 'order', 'ASC'))
->assign('uri', Uri::segments()) ->assign('uri', Uri::segments())
->assign('defpage', Option::get('defaultpage')) ->assign('defpage', Option::get('defaultpage'))
->display(); ->display();

View File

@@ -7,18 +7,25 @@
<?php if (isset($errors['menu_item_name_empty'])) $error_class = ' error'; else $error_class = ''; ?> <?php if (isset($errors['menu_item_name_empty'])) $error_class = ' error'; else $error_class = ''; ?>
<a href="javascript:;" style="text-decoration:none; color:#333; border-bottom:1px dashed #333;" data-toggle="modal" onclick="$('#addMenuPageModal').modal('show').width(270);" ><?php echo __('Add page', 'menu'); ?></a><br /><br /> <a href="javascript:;" style="text-decoration:none; color:#333; border-bottom:1px dashed #333;" data-toggle="modal" onclick="$('#selectPageModal').modal('show').width(270);" ><?php echo __('Select page', 'menu'); ?></a> /
<a href="javascript:;" style="text-decoration:none; color:#333; border-bottom:1px dashed #333;" data-toggle="modal" onclick="$('#selectCategoryModal').modal('show').width(270);" ><?php echo __('Select category', 'menu'); ?></a><br /><br />
<?php <?php
echo Form::label('menu_item_name', __('Item name', 'menu')); echo Form::label('menu_item_name', __('Item name', 'menu'));
echo Form::input('menu_item_name', $menu_item_name, array('class' => 'span6'.$error_class)); echo Form::input('menu_item_name', $menu_item_name, array('class' => 'span3'.$error_class));
if (isset($errors['menu_item_name_empty'])) echo Html::nbsp(4).'<span class="error">'.$errors['menu_item_name_empty'].'</span>'; if (isset($errors['menu_item_name_empty'])) echo Html::nbsp(4).'<span class="error">'.$errors['menu_item_name_empty'].'</span>';
echo ( echo (
Form::label('menu_item_link', __('Item link', 'menu')). Form::label('menu_item_link', __('Item link', 'menu')).
Form::input('menu_item_link', $menu_item_link, array('class' => 'span6')) Form::input('menu_item_link', $menu_item_link, array('class' => 'span3'))
);
echo (
Form::label('menu_item_category', __('Item category', 'menu')).
Form::input('menu_item_category', $menu_item_category, array('class' => 'span3'))
); );
?> ?>
@@ -26,13 +33,13 @@
echo ( echo (
Html::br(). Html::br().
Form::label('menu_item_target', __('Item target', 'menu')). Form::label('menu_item_target', __('Item target', 'menu')).
Form::select('menu_item_target', $menu_item_target_array, $menu_item_target) Form::select('menu_item_target', $menu_item_target_array, $menu_item_target, array('class' => 'span3'))
); );
echo ( echo (
Html::br(). Html::br().
Form::label('menu_item_order', __('Item order', 'menu')). Form::label('menu_item_order', __('Item order', 'menu')).
Form::select('menu_item_order', $menu_item_order_array, $menu_item_order) Form::select('menu_item_order', $menu_item_order_array, $menu_item_order, array('class' => 'span3'))
); );
echo ( echo (
@@ -42,7 +49,7 @@
); );
?> ?>
<div class="modal hide" id="addMenuPageModal"> <div class="modal hide" id="selectPageModal">
<div class="modal-header"> <div class="modal-header">
<a class="close" data-dismiss="modal">×</a> <a class="close" data-dismiss="modal">×</a>
<h3><?php echo __('Select page', 'menu'); ?></h3> <h3><?php echo __('Select page', 'menu'); ?></h3>
@@ -51,10 +58,26 @@
<p> <p>
<ul class="unstyled"> <ul class="unstyled">
<?php if (count($pages_list) > 0) foreach($pages_list as $page) { ?> <?php if (count($pages_list) > 0) foreach($pages_list as $page) { ?>
<li><a href="javascript:;" onclick="addMenuPage('<?php echo $page['slug']; ?>', '<?php echo $page['title']; ?>');"><?php echo $page['title']; ?></a></li> <li><a href="javascript:;" onclick="selectPage('<?php echo $page['slug']; ?>', '<?php echo $page['title']; ?>');"><?php echo $page['title']; ?></a></li>
<?php } ?> <?php } ?>
<?php if (count($components_list) > 0) foreach($components_list as $component) { ?> <?php if (count($components_list) > 0) foreach($components_list as $component) { ?>
<li><a href="javascript:;" onclick="addMenuPage('<?php echo Text::lowercase($component); ?>', '<?php echo __($component); ?>');"><?php echo __($component); ?></a></li> <li><a href="javascript:;" onclick="selectPage('<?php echo Text::lowercase($component); ?>', '<?php echo __($component); ?>');"><?php echo __($component); ?></a></li>
<?php } ?>
</ul>
</p>
</div>
</div>
<div class="modal hide" id="selectCategoryModal">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3><?php echo __('Select category', 'menu'); ?></h3>
</div>
<div class="modal-body">
<p>
<ul class="unstyled">
<?php if (count($categories) > 0) foreach($categories as $category) { ?>
<li><a href="javascript:;" onclick="selectCategory('<?php echo $category; ?>');"><?php echo $category; ?></a></li>
<?php } ?> <?php } ?>
</ul> </ul>
</p> </p>

View File

@@ -7,18 +7,25 @@
<?php if (isset($errors['menu_item_name_empty'])) $error_class = ' error'; else $error_class = ''; ?> <?php if (isset($errors['menu_item_name_empty'])) $error_class = ' error'; else $error_class = ''; ?>
<a href="javascript:;" style="text-decoration:none; color:#333; border-bottom:1px dashed #333;" data-toggle="modal" onclick="$('#addMenuPageModal').modal('show').width(270);" ><?php echo __('Add page', 'menu'); ?></a><br /><br /> <a href="javascript:;" style="text-decoration:none; color:#333; border-bottom:1px dashed #333;" data-toggle="modal" onclick="$('#selectPageModal').modal('show').width(270);" ><?php echo __('Select page', 'menu'); ?></a> /
<a href="javascript:;" style="text-decoration:none; color:#333; border-bottom:1px dashed #333;" data-toggle="modal" onclick="$('#selectCategoryModal').modal('show').width(270);" ><?php echo __('Select category', 'menu'); ?></a><br /><br />
<?php <?php
echo Form::label('menu_item_name', __('Item name', 'menu')); echo Form::label('menu_item_name', __('Item name', 'menu'));
echo Form::input('menu_item_name', $menu_item_name, array('class' => 'span6'.$error_class)); echo Form::input('menu_item_name', $menu_item_name, array('class' => 'span3'.$error_class));
if (isset($errors['menu_item_name_empty'])) echo Html::nbsp(4).'<span class="error">'.$errors['menu_item_name_empty'].'</span>'; if (isset($errors['menu_item_name_empty'])) echo Html::nbsp(4).'<span class="error">'.$errors['menu_item_name_empty'].'</span>';
echo ( echo (
Form::label('menu_item_link', __('Item link', 'menu')). Form::label('menu_item_link', __('Item link', 'menu')).
Form::input('menu_item_link', $menu_item_link, array('class' => 'span6')) Form::input('menu_item_link', $menu_item_link, array('class' => 'span3'))
);
echo (
Form::label('menu_item_category', __('Item category', 'menu')).
Form::input('menu_item_category', $menu_item_category, array('class' => 'span3'))
); );
?> ?>
@@ -26,13 +33,13 @@
echo ( echo (
Html::br(). Html::br().
Form::label('menu_item_target', __('Item target', 'menu')). Form::label('menu_item_target', __('Item target', 'menu')).
Form::select('menu_item_target', $menu_item_target_array, $menu_item_target) Form::select('menu_item_target', $menu_item_target_array, $menu_item_target, array('class' => 'span3'))
); );
echo ( echo (
Html::br(). Html::br().
Form::label('menu_item_order', __('Item order', 'menu')). Form::label('menu_item_order', __('Item order', 'menu')).
Form::select('menu_item_order', $menu_item_order_array, $menu_item_order) Form::select('menu_item_order', $menu_item_order_array, $menu_item_order, array('class' => 'span3'))
); );
echo ( echo (
@@ -42,7 +49,7 @@
); );
?> ?>
<div class="modal hide" id="addMenuPageModal"> <div class="modal hide" id="selectPageModal">
<div class="modal-header"> <div class="modal-header">
<a class="close" data-dismiss="modal">×</a> <a class="close" data-dismiss="modal">×</a>
<h3><?php echo __('Select page', 'menu'); ?></h3> <h3><?php echo __('Select page', 'menu'); ?></h3>
@@ -51,10 +58,27 @@
<p> <p>
<ul class="unstyled"> <ul class="unstyled">
<?php if (count($pages_list) > 0) foreach($pages_list as $page) { ?> <?php if (count($pages_list) > 0) foreach($pages_list as $page) { ?>
<li><a href="javascript:;" onclick="addMenuPage('<?php echo $page['slug']; ?>', '<?php echo $page['title']; ?>');"><?php echo $page['title']; ?></a></li> <li><a href="javascript:;" onclick="selectPage('<?php echo $page['slug']; ?>', '<?php echo $page['title']; ?>');"><?php echo $page['title']; ?></a></li>
<?php } ?> <?php } ?>
<?php if (count($components_list) > 0) foreach($components_list as $component) { ?> <?php if (count($components_list) > 0) foreach($components_list as $component) { ?>
<li><a href="javascript:;" onclick="addMenuPage('<?php echo Text::lowercase($component); ?>', '<?php echo __($component); ?>');"><?php echo __($component); ?></a></li> <li><a href="javascript:;" onclick="selectPage('<?php echo Text::lowercase($component); ?>', '<?php echo __($component); ?>');"><?php echo __($component); ?></a></li>
<?php } ?>
</ul>
</p>
</div>
</div>
<div class="modal hide" id="selectCategoryModal">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3><?php echo __('Select category', 'menu'); ?></h3>
</div>
<div class="modal-body">
<p>
<ul class="unstyled">
<?php if (count($categories) > 0) foreach($categories as $category) { ?>
<li><a href="javascript:;" onclick="selectCategory('<?php echo $category; ?>');"><?php echo $category; ?></a></li>
<?php } ?> <?php } ?>
</ul> </ul>
</p> </p>

View File

@@ -1,13 +1,36 @@
<h2><?php echo __('Menu', 'menu'); ?></h2> <h2><?php echo __('Menu', 'menu'); ?></h2>
<br /> <br />
<?php if ($menu->count() == 0) { ?>
<h3><?php echo __('Category', 'menu'); ?>: <?php echo 'default'; ?></h3>
<br />
<?php <?php
echo ( echo (
Html::anchor(__('Create new item', 'menu'), 'index.php?id=menu&action=add', array('title' => __('Create new page', 'menu'), 'class' => 'btn btn-small')) Html::anchor(__('Create new item', 'menu'), 'index.php?id=menu&action=add', array('title' => __('Create new page', 'menu'), 'class' => 'btn btn-small'))
); );
?> ?>
<br /><br /> <br /><br />
<?php } ?>
<?php
foreach ($categories as $category) {
$items = $menu->select('[category="'.$category.'"]', 'all', null, array('id', 'name', 'link', 'target', 'order', 'category'), 'order', 'ASC');
?>
<h3><?php echo __('Category', 'menu'); ?>: <?php echo ($category == '') ? 'default' : $category; ?></h3>
<br />
<?php
echo (
Html::anchor(__('Create new item', 'menu'), 'index.php?id=menu&action=add', array('title' => __('Create new page', 'menu'), 'class' => 'btn btn-small'))
);
?>
<br /><br />
<table class="table table-bordered"> <table class="table table-bordered">
<thead> <thead>
@@ -48,4 +71,6 @@
</tr> </tr>
<?php } ?> <?php } ?>
</tbody> </tbody>
</table> </table>
<br />
<?php } ?>