Перейти к содержимому


Фото
* * * * * 2 голосов

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

меню

  • Чтобы отвечать, сперва войдите на форум
48 ответов в теме

#1 Gregar

Gregar
  • Пользователь
  • 100 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 27.03.2013 - 06:40

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

http://s59.radikal.r...e9a854eaebe.jpg

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



#2 Gregar

Gregar
  • Пользователь
  • 100 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 12.05.2013 - 16:35

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

 

2013-04-05_120322.jpg

 

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;
}


#3 Gregar

Gregar
  • Пользователь
  • 100 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 12.05.2013 - 16:39

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

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



#4 Gregar

Gregar
  • Пользователь
  • 100 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 12.05.2013 - 16:39

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



#5 Kpoxa

Kpoxa
  • Пользователь
  • 639 сообщений
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 12.05.2013 - 20:09

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



#6 Kosjak76

Kosjak76
  • Модератор
  • 3 587 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 12.05.2013 - 20:14

Я считаю это лишним.

Думаю, если добавить еще 3 (ТРИ) меню, этого вполне хватит в 99% случаев :)



#7 Gregar

Gregar
  • Пользователь
  • 100 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 13.05.2013 - 03:08

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

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



#8 Kpoxa

Kpoxa
  • Пользователь
  • 639 сообщений
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 13.05.2013 - 07:49

Смотря что считать интересным, вот мой старый сайт http://www.vitam.16mb.com/ может там что присмотришь



#9 sergei5770

sergei5770
  • Пользователь
  • 197 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 26.04.2014 - 13:25

Отличная штука, как раз то, что нужно, спасибо.



#10 joejoker

joejoker
  • Пользователь
  • 1 сообщений
  • Откуда:Омск

Опубликовано 09.06.2014 - 11:28

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

 

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

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

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



#11 infinity178

infinity178
  • Сомнительные
  • 283 сообщений
  • Пользователь

Опубликовано 10.06.2014 - 08:27

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

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

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

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

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



#12 Veni

Veni
  • Пользователь
  • 18 сообщений
  • Дизайн, Программирование, Верстка, SEO

Опубликовано 04.05.2016 - 21:57

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

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


#13 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 05.05.2016 - 13:30

Подскажите, где я ошибся?

В редактировании файла...

#14 Veni

Veni
  • Пользователь
  • 18 сообщений
  • Дизайн, Программирование, Верстка, SEO

Опубликовано 05.05.2016 - 16:22

В редактировании файла...

какого именно?



#15 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 05.05.2016 - 16:28

Седьмого

#16 Veni

Veni
  • Пользователь
  • 18 сообщений
  • Дизайн, Программирование, Верстка, SEO

Опубликовано 05.05.2016 - 22:25

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



#17 mishanya

mishanya
  • Фрилансер
  • 2 409 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 06.05.2016 - 07:38

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

 

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



#18 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 06.05.2016 - 09:00

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

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



#19 Veni

Veni
  • Пользователь
  • 18 сообщений
  • Дизайн, Программирование, Верстка, SEO

Опубликовано 06.05.2016 - 14:50

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

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


#20 mishanya

mishanya
  • Фрилансер
  • 2 409 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 06.05.2016 - 14:54

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

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

 

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

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






Также с меткой «меню»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых