Перейти к содержанию
Официальный форум поддержки Simpla

Создание дополнительного меню


Рекомендуемые сообщения

Хотелось бы по интересоваться можно ли сделать так чтобы в админ панели в разделе "Страницы" была возможность создавать уникальные "меню". На данный момент там находятся: "основное меню" и "другие страницы".
Иной раз возникает нужна выводить несколько меню в том числе и под меню.. и для этого приходится прописывать ссылки, а это не совсем удобно..

http://s59.radikal.ru/i166/1303/71/9e9a854eaebe.jpg

Ко всему этому хотелось бы еще чтобы обновился БЛОГ и в нем можно было бы создавать категории.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...
  • Ответов 50
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Добавление меню из админки для 2.2х 

 

 

1. выполнить запрос MySQL

ALTER TABLE `s_menu` MODIFY COLUMN `id` INT AUTO_INCREMENT;

 

2. в Файле /api/Simpla.php после строки

'notify'     => 'Notify',

 

добавить строку

'menus'      => 'Menus',

 

3. в Файле /api/Managers.php в строке 18 перед

'license');

 

добавить

'menus',

 

4. в Файле /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;
	}	

 

5. в Файле /simpla/ajax/update_object.php перед строкой

 case 'label':

 

добавить строки

case 'menu':
    	if($simpla->managers->access('menus'))
        $result = $simpla->pages->update_menu($id, $values);
        break;

 

6. в Файле /simpla/IndexAdmin.php после строки

'ManagerAdmin'        => 'managers',

 

добавить строку

'MenuAdmin'           => 'menus',

 

7. в папку /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');
	}
}

 

8. в файле /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>

 

9. в папке /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}

 

10. в папке /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>

 

11. в файле /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;
}
Ссылка на сообщение
Поделиться на другие сайты

Кто не нашел у себя "в Файле /api/Managers.php в строке 18 перед ‘license’);"  «‘license’);»

Ищите строчку: "public $permissions_list = array('products',............"

Ссылка на сообщение
Поделиться на другие сайты

Разрекламировали, блин.  :)

Ну а куда деваться то))) Вспоминаю как сам искал пробовал помногу раз и все было напрасно.. Есть у тебя еще что то интересное ???

Ссылка на сообщение
Поделиться на другие сайты
  • 11 месяцев спустя...
  • 1 месяц спустя...

Если у кого то возникнут проблемы  установкой, могу помочь.. обращайтесь..

 

Скажите, зачем так делать? 

$menus[$i]->$n = $v;

Разве это необходимо?

Ссылка на сообщение
Поделиться на другие сайты

Скажите, зачем так делать?  

[если я правильно понял - производит запись данных в БД ]

$menus[$i]->$n = $v;

Разве это необходимо?

[безусловно!]

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Млин, а у меня не получилось. Захожу в админку, кликаю на Страницы и выходит ошибко:

"Ошибка сервера.
Ошибка при загрузке http://simpla.shtori-shop.ru/simpla/index.php?module=PagesAdmin. Возможно, на сайте ведутся работы или он настроен неправильно."
Подскажите, где я ошибся?
Спасибо!
Ссылка на сообщение
Поделиться на другие сайты

скопировал содержимое еще раз и затер старое, даже название файла скопировал отсюда, все равно все тоже самое (((

 

смотрите лог ошибок. никто так не скажет потому что вы могли допустить ошибку в любом из этих файлов. попробуйте вывести ошибки на экран или найти лог на сервере

Ссылка на сообщение
Поделиться на другие сайты

Все это хорошо, когда для страниц требуется много разных разделов и когда ими часто манипулируют.

А если надо только лишь создать новый раздел, то можно сделать неизмеримо проще - достаточно лишь выполнить простенький  SQL-запрос...

Ссылка на сообщение
Поделиться на другие сайты

логи посмотрел, выдавало ошибку по 4 заданию, перезалил, меню "Страницы" заработали. Теперь в настройках, когда кликаешь на новый пункт "Меню" опять похожая ошибка в логах выглядит вот так:

simpla.shtori-shop.ru [Fri May 06 14:45:45 2016] [error] [client 46.159.146.91] PHP Fatal error:  Uncaught  --> Smarty: Unable to load template file 'menu.tpl' <-- \n  thrown in /home/s/shtorishru/simpla/public_html/Smarty/libs/sysplugins/smarty_internal_templatebase.php on line 127, referer: http://simpla.shtori-shop.ru/simpla/index.php?module=SettingsAdmin

 
К сожалению, разобраться с ней не хватает знаний.
Ссылка на сообщение
Поделиться на другие сайты

 

логи посмотрел, выдавало ошибку по 4 заданию, перезалил, меню "Страницы" заработали. Теперь в настройках, когда кликаешь на новый пункт "Меню" опять похожая ошибка в логах выглядит вот так:

simpla.shtori-shop.ru [Fri May 06 14:45:45 2016] [error] [client 46.159.146.91] PHP Fatal error:  Uncaught  --> Smarty: Unable to load template file 'menu.tpl' <-- \n  thrown in /home/s/shtorishru/simpla/public_html/Smarty/libs/sysplugins/smarty_internal_templatebase.php on line 127, referer: http://simpla.shtori-shop.ru/simpla/index.php?module=SettingsAdmin

 
К сожалению, разобраться с ней не хватает знаний.

 

вам пишет что не может загрузить шаблон меню, вы выполнили пункт

 

10. в папке /simpla/design/html/ добавить файл menu.tpl следующего содержания
Ссылка на сообщение
Поделиться на другие сайты

вам пишет что не может загрузить шаблон меню, вы выполнили пункт

блин, да! Я с большой буквы создал файл, заработало, только почему-то кириллица на этой вкладке не пашет: https://yadi.sk/i/a8g40RDsrXZuA

Ссылка на сообщение
Поделиться на другие сайты

блин, да! Я с большой буквы создал файл, заработало, только почему-то кириллица на этой вкладке не пашет: https://yadi.sk/i/a8g40RDsrXZuA

видимо не в той кодировке сохранили файлик

Ссылка на сообщение
Поделиться на другие сайты

Так, ну вроде заработало, осталось понять: как автор этой доработкой хотел "выводить несколько меню в том числе и под меню.." Интересует подкаталоги в основном меню. Чтобы например в пункте "О нас" вывести подкаталоги "Отзвы", "Контакты", "Статьи" и тому подобное

Ссылка на сообщение
Поделиться на другие сайты

Так, ну вроде заработало, осталось понять: как автор этой доработкой хотел "выводить несколько меню в том числе и под меню.." Интересует подкаталоги в основном меню. Чтобы например в пункте "О нас" вывести подкаталоги "Отзвы", "Контакты", "Статьи" и тому подобное

 

что вам сказать... никак). одна страница может принадлежать только одному меню). это конечно не совсем логично, но как-то так. и это не вина автора темы, так устроен механизм меню симплы.

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

что вам сказать... никак). одна страница может принадлежать только одному меню)

так ))))

это не смешно! Я же процитировал автора, он пишет что ДАЖЕ под меню, что мне и нужно было. 

Тогда зачем эта доработка вообще кому-то обосралась?

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...