Jump to content

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


Recommended Posts

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

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

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

Link to post
Share on other sites
  • 1 month later...
  • Replies 50
  • Created
  • Last Reply

Top Posters In This Topic

Добавление меню из админки для 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;
}
Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites
  • 11 months later...
  • 1 month later...

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

 

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

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

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

Link to post
Share on other sites
  • 1 year later...

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

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

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

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

логи посмотрел, выдавало ошибку по 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

 
К сожалению, разобраться с ней не хватает знаний.
Link to post
Share on other sites

 

логи посмотрел, выдавало ошибку по 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 следующего содержания
Link to post
Share on other sites

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

Link to post
Share on other sites

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

 

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

Edited by mishanya
Link to post
Share on other sites

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

так ))))

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

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...