WSCHUDO
Постоялец
- Регистрация
- 17 Окт 2016
- Сообщения
- 83
- Реакции
- 77
- Автор темы
- #1
Создание нового (дополнительного) меню
Для начала выполним запрос MySQL
в Файле /api/Simpla.php после строки
добавить строку
Не забываем про запятые, в конце её нет!
в Файле /api/Managers.php в строке 18 перед
добавить
в Файле /api/Pages.php после строк
добавить
далее в конце файла добавить, перед закрывающей скобкой "}"
в Файле /simpla/ajax/update_object.php перед строкой
добавить строки
в Файле /simpla/IndexAdmin.php после строки
добавить строку
в папку /simpla/ добавить файл MenuAdmin.php следующего содержания
в файле /simpla/design/html/index.tpl после строк
добавить строки
в папке /simpla/design/html/ файлах currency.tpl, deliveries.tpl, delivery.tpl, manager.tpl, managers.tpl, payment_method.tpl, payment_methods.tpl, settings.tpl перед строкой
добавить строку
в папку /simpla/design/html/ добавить файл menu.tpl следующего содержания
в файле /simpla/design/css/style.css перед строкой
добавить стили
в файле /simpla/design/html/manager.tpl перед строкой
добавляем
Удачных экспериментов =)
Для начала выполним запрос MySQL
Код:
ALTER TABLE `s_menu` MODIFY COLUMN `id` INT AUTO_INCREMENT;
в Файле /api/Simpla.php после строки
Код:
'notify' => 'Notify'
добавить строку
Код:
'menus' => 'Menus'
Не забываем про запятые, в конце её нет!
в Файле /api/Managers.php в строке 18 перед
Код:
'license');
добавить
Код:
'menus',
в Файле /api/Pages.php после строк
Код:
class Pages extends Simpla
{
добавить
Код:
private $menus = array();
private $menu;
далее в конце файла добавить, перед закрывающей скобкой "}"
Код:
/*
*
* Обновить список меню
*
*/
private function init_menu()
{
$this->menus = array();
// Выбираем из базы меню
$query = "SELECT id, name, position FROM __menu ORDER BY position";
$this->db->query($query);
$results = $this->db->results();
foreach($results as $c)
{
$this->menus[$c->id] = $c;
}
$this->menu = reset($this->menus);
}
/*
*
* Создание меню
*
*/
public function add_menu($menu)
{
$query = $this->db->placehold('INSERT INTO __menu SET ?%', $menu);
if(!$this->db->query($query))
return false;
$id = $this->db->insert_id();
$this->db->query("UPDATE __menu SET position=id WHERE id=?", $id);
$this->init_menu();
return $id;
}
/*
*
* Обновить меню
*
*/
public function update_menu($id, $menu)
{
$query = $this->db->placehold('UPDATE __menu SET ?% WHERE id in (?@)', $menu, (array)$id);
if(!$this->db->query($query))
return false;
$this->init_menu();
return $id;
}
/*
*
* Удалить меню
*
*/
public function delete_menu($id)
{
if(!empty($id))
{
$query = $this->db->placehold("DELETE FROM __menu WHERE id=? LIMIT 1", intval($id));
if($this->db->query($query))
return true;
$this->init_menu();
}
return false;
}
в Файле /simpla/ajax/update_object.php перед строкой
Код:
case 'label':
добавить строки
Код:
case 'menu':
if($simpla->managers->access('menus'))
$result = $simpla->pages->update_menu($id, $values);
break;
в Файле /simpla/IndexAdmin.php после строки
Код:
'ManagerAdmin' => 'managers',
добавить строку
Код:
'MenuAdmin' => 'menus',
в папку /simpla/ добавить файл MenuAdmin.php следующего содержания
Код:
<?PHP
require_once('api/Simpla.php');
########################################
class MenuAdmin extends Simpla
{
public function fetch()
{
// Обработка действий
if($this->request->method('post'))
{
foreach($this->request->post('menu') as $n=>$va)
foreach($va as $i=>$v)
$menus[$i]->$n = $v;
$menus_ids = array();
foreach($menus as $menu)
{
if($menu->id)
$this->pages->update_menu($menu->id, $menu);
else
$menu->id = $this->pages->add_menu($menu);
$menus_ids[] = $menu->id;
}
// Удалить непереданные меню
$query = $this->db->placehold('DELETE FROM __menu WHERE id NOT IN(?@)', $menus_ids);
$this->db->query($query);
// Отсортировать меню
asort($menus_ids);
$i = 0;
foreach($menus_ids as $menu_id)
{
$this->pages->update_menu($menus_ids[$i], array('position'=>$menu_id));
$i++;
}
// Действия с выбранными
$action = $this->request->post('action');
$id = $this->request->post('action_id');
if(!empty($action) && !empty($id))
switch($action)
{
case 'delete':
{
$this->pages->delete_menu($id);
break;
}
}
}
// Отображение
$menus = $this->pages->get_menus();
$menu = $this->pages->get_menu($menu_id);
$this->design->assign('menu', $menu);
$this->design->assign('menus', $menus);
return $this->design->fetch('menu.tpl');
}
}
в файле /simpla/design/html/index.tpl после строк
Код:
{elseif in_array('managers', $manager->permissions)}
<li><a href="index.php?module=ManagersAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
добавить строки
Код:
{elseif in_array('menus', $manager->permissions)}
<li><a href="index.php?module=MenuAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
в папке /simpla/design/html/ файлах currency.tpl, deliveries.tpl, delivery.tpl, manager.tpl, managers.tpl, payment_method.tpl, payment_methods.tpl, settings.tpl перед строкой
Код:
{/capture}
добавить строку
Код:
{if in_array('menus', $manager->permissions)}<li><a href="index.php?module=MenuAdmin">Меню</a></li>{/if}
в папку /simpla/design/html/ добавить файл menu.tpl следующего содержания
Код:
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
<li class="active"><a href="index.php?module=MenusAdmin">Меню</a></li>
{/capture}
{$meta_title = 'Меню страниц' scope=parent}
{* On document load *}
{literal}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script>
$(function() {
// Сортировка списка
$("#currencies_block").sortable({ items: 'ul.sortable' , axis: 'y', cancel: '#header', handle: '.move_zone' });
// Добавление меню
var curr = $('#new_currency').clone(true);
$('#new_currency').remove().removeAttr('id');
$('a#add_currency').click(function() {
$(curr).clone(true).appendTo('#currencies').fadeIn('slow').find("input[name*=menu][name*=name]").focus();
return false;
});
// Удаление меню
$("a.delete").click(function() {
$('input[type="hidden"][name="action"]').val('delete');
$('input[type="hidden"][name="action_id"]').val($(this).closest("ul").find('input[type="hidden"][name*="menu[id]"]').val());
$(this).closest("form").submit();
});
$("form").submit(function() {
if($('input[type="hidden"][name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}
<!-- Заголовок -->
<div id="header">
<h1>Меню страниц</h1>
<a class="add" id="add_currency" href="#">Добавить</a>
<!-- Заголовок (The End) -->
</div>
<form method=post>
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<!-- Меню -->
<div id="currencies_block">
<ul id="header">
<li class="move"></li>
<li class="menuID">ID</li>
<li class="name">Название меню</li>
</ul>
<div id="currencies">
{foreach from=$menus item=m}
<ul class="sortable">
<li class="move"><div class="move_zone"></div></li>
<li class="menuID"><input name="menu[id][{$m->id}]" type="hidden" value="{$m->id|escape}" /><span>{$m->id|escape}</span></li>
<li class="name"><input name="menu[name][{$m->id}]" type="" value="{$m->name|escape}" /></li>
<li class="icons">
{if !$m@first}
<a class="delete" href="#" title="Удалить"></a>
{/if}
</li>
</ul>
{/foreach}
<ul id="new_currency" style='display:none;'>
<li class="move"><div class="move_zone"></div></li>
<li class="menuID"><input name="menu[id][]" type="hidden" value="" /></li>
<li class="name"><input name="menu[name][]" type="" value="" /></li>
<li class="icons"></li>
</ul>
</div>
</div>
<!-- Меню (The End)-->
<div id="action">
<input type=hidden name=action value=''>
<input type=hidden name=action_id value=''>
<input id='apply_action' class="button_green" type=submit value="Применить">
</div>
</form>
в файле /simpla/design/css/style.css перед строкой
Код:
span.alert {
добавить стили
Код:
/* Меню */
#currencies_block ul.sortable li.menuID {
border:1px solid #BFBBB5;
background:#ffffff;
height: 20px;
padding-top:5px
}
#currencies_block li.menuID { width: 50px; }
#currencies_block li.menuID span { width: 30px; height: 20px;
font-size: 14px;
color: #636363;
margin-top: 0px;
padding: 2px 0 0 10px;
margin-left: 2px;
}
в файле /simpla/design/html/manager.tpl перед строкой
Код:
'license' =>'Управление лицензией'
добавляем
Код:
'menu' =>'Создание меню',
Удачных экспериментов =)