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


- - - - -

Как подавить вывод заголовка меню?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 biz_zon

biz_zon

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 02.12.2009, 09:17

Прикручиваю Зебру к готовому дизайну, с горизонтальным каскадным выпадающим меню. Проблема - при размещении в шаблоне пхп-кода, ответственного за вывод меню
	<ul id=menu>
			<?php zsidebarmanager::displaySidebar(); ?>
		 </ul>
заголовок просто лишний - он не ссылка, и css-стиль не может оформить его как кнопку, а ссылки на разделы (рубрики) оказываются "этажом ниже", на следующем уровне вложенности, и оформляются соответственно.
Пытался на каждую рубрику делать отдельный виджет

	<ul id=menu>
			<li><a href="/">На главную</a></li>
			<?php zsidebarmanager::displaySidebar(1); ?>
			<?php zsidebarmanager::displaySidebar(2); ?>
			<?php zsidebarmanager::displaySidebar(3); ?>
		 </ul>
Но работает при этом только верхняя строчка... Если отменить вывод заголовка, заработает, но как это сделать?

#2 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 02.12.2009, 10:25

Попробуйте использовать функцию:

<?php z_menu(array(
// настройки виджета меню
)); ?>


#3 biz_zon

biz_zon

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 02.12.2009, 21:38

 support (02.12.2009, 10:25) писал:

Попробуйте использовать функцию:
<?php z_menu(array(
// настройки виджета меню
)); ?>
Спасибо, а можно подробнее? Класс zmenu.php во второй версии почему-то не нашелся, а старый, из 1.14, работать отказался. В этих условиях, по-моему, не столь важно, как назвать функцию, гораздо интереснее развернуть // настройки виджета меню.
У меня сложилось впечатление, что в обновленном движке виджет меню - просто частный случай сайдбара, и если я убираю первый параметр:
<?php
$sidebar1 = new zsidebar();
$sidebar1->addWidget(new zwidget_pagemenu(/*'menu1',*/ array(
	//'title' => 'Страницы', // Заголовок блока
	'type' => 'full', // Тип вывода меню: minimal или full
	'depth' => 0, // максимальная глубина отображаемой вложенности, 0 - неограничена
	'menuid' => 'main', // тип меню, false - все пункты, main - главное меню
	'type' => 'full', // Тип вывода меню: minimal или full
)));
Денвер ругается, что заголовок уже отправлен, и сделать ничего нельзя. Попытка скопировать сюда сообщение об ошибке валит сессию :angry: Мне очень помог бы ответ типа: "В файле functions.php (или в каком другом файле) надо закомментировать такие-то строки" или хотя бы: "Во второй версии движка за вывод меню отвечает файл, например, znavi.php, параметры он берет из functions.php и скармливает их такому-то классу".
Заранее благодарен. :rolleyes:

#4 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 02.12.2009, 21:55

 biz_zon (02.12.2009, 21:38) писал:

Спасибо, а можно подробнее?

Виджет zwidget_pagemenu (файл zengine/classes/zwidget/pagemenu.php). Функция z_menu() это обёртка виджета zwidget_pagemenu (http://zebrum.ru/doc...heme/functions/):

Определение функции:

function z_menu ($params = array()) {
	$widget = new zwidget_pagemenu('pagemenu', $params);
	echo $widget->display();
}

Массив всех параметров виджета zwidget_pagemenu:

array(
	'type' => 'minimal',
	'depth' => 0,
	'menuid' => 'main',
	'childs_of' => '/',
	'number' => 0,
	'tag_ul' => 'ul',
	'tag_li' => 'li',

	// базовые свойства виджетов
	'before_widget' => '<div id="%1$s" class="widget %2$s">',
	'after_widget' => "</div>\n",
	'before_title' => '<h2 class="widgettitle">',
	'after_title' => "</h2>\n",
	'title' => '',
)

Если не указывать title, то не будут выводиться и before_title с after_title.

#5 biz_zon

biz_zon

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 02.12.2009, 22:18

Спасибо, теперь гораздо понятнее. Посплю и попробую :D

#6 biz_zon

biz_zon

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 03.12.2009, 21:20

Попробовал  :blink: Возникли еще вопросы - функцию
<?php z_menu(array(
// настройки виджета меню)); 
?>
вписывать в файл functions.php перед созданием экземпляра виджета или вызывать прямо из шаблона (template.php)? В принципе, и так и эдак не выходит... Может, есть где посмотреть пример вызова этой функции?

#7 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 04.12.2009, 08:57

Вызывать только в шаблоне. Например:

<?php z_menu(array('number' => 2)); ?>


#8 biz_zon

biz_zon

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 06.12.2009, 13:48

 support (04.12.2009, 08:57) писал:

Вызывать только в шаблоне. Например:

<?php z_menu(array('number' => 2)); ?>
Спасибо, так заработало. Но для окончательного решения проблемы надо понять, каким образом в функцию
function z_menu ($params = array()) {
	$widget = new zwidget_pagemenu('pagemenu', $params);
	echo $widget->display();}
передать параметр 'pagemenu' - ведь в заголовке функции его нет? Если я правильно понял, именно он помогает движку разобраться, с каким меню работать, если их несколько. По логике, за это должен отвечать параметр 'menuid', но в зебре это просто переключатель количества выводимых пунктов.
Кроме того, непонятно, зачем в коде
$sidebar->addWidget(new zwidget_pagemenu('pages', array(
	'title' => 'Страницы', // Заголовок блока
	'type' => 'minimal', // Тип вывода меню: minimal или full
	'depth' => 0, // максимальная глубина отображаемой вложенности, 0 - неограничена
	'menuid' => 'main', // тип меню, false - все пункты, main - главное меню
	'type' => 'minimal', // Тип вывода меню: minimal или full
дважды передается 'type'?

Извините, если надоел вопросами, но движок интересный, хочу понять, способен ли он вместе со мной (или я вместе с ним) реализовать совершенно конкретные замыслы. Например, написал в шаблоне
<ul id="menu">
	<li><a href="index.html"><b>На главную</b></a></li>
	<li><a href="section-1.html"><b>Раздел 1</b></a></li>
	<li><a href="section-2.html"><b>Раздел 2</b></a></li>
	<li><a href="section-3.html"><b>Раздел 3</b></a></li>
	<li><a href="section-4.html"><b>Раздел 4</b></a></li>
</ul>
, чтобы потом ссылки на каждый из разделов передать в отдельные виджеты или функции z_menu через пaраметр 'child_of'=>'/section-*.html', но куда это вписывать :blink: ?

#9 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 07.12.2009, 21:12

 biz_zon (06.12.2009, 13:48) писал:

Спасибо, так заработало. Но для окончательного решения проблемы надо понять, каким образом в функцию
function z_menu ($params = array()) {
	$widget = new zwidget_pagemenu('pagemenu', $params);
	echo $widget->display();}
передать параметр 'pagemenu' - ведь в заголовке функции его нет? Если я правильно понял, именно он помогает движку разобраться, с каким меню работать, если их несколько.
pagemenu это идентификатор виджета, а не меню. Не обязательно использовать функцию z_menu, можно создать виджет и вывести его напрямую:

<?php
$widget = new zwidget_pagemenu('menu', array());
echo $widget->display();
?>

вместо вызова функции. Вместо 'pagemenu' можно указывать любой текст (уникальный идентификатор виджета) или null (идентификатор будет уникальным вида widget-4).

 biz_zon (06.12.2009, 13:48) писал:

По логике, за это должен отвечать параметр 'menuid', но в зебре это просто переключатель количества выводимых пунктов.
menuid указывает на тип меню, пункты которого нужно выводить. Если указать false, то будут выводиться все пункты. Если у страницы не указан тип меню, то тип меню страницы будет main, проэтому в коде в качестве примера приводится false и main.

 biz_zon (06.12.2009, 13:48) писал:

Кроме того, непонятно, зачем в коде дважды передается 'type'?
Увы, банальная опечатка.

 biz_zon (06.12.2009, 13:48) писал:

Извините, если надоел вопросами, но движок интересный, хочу понять, способен ли он вместе со мной (или я вместе с ним) реализовать совершенно конкретные замыслы. Например, написал в шаблоне
<ul id="menu">
	<li><a href="index.html"><b>На главную</b></a></li>
	<li><a href="section-1.html"><b>Раздел 1</b></a></li>
	<li><a href="section-2.html"><b>Раздел 2</b></a></li>
	<li><a href="section-3.html"><b>Раздел 3</b></a></li>
	<li><a href="section-4.html"><b>Раздел 4</b></a></li>
</ul>
, чтобы потом ссылки на каждый из разделов передать в отдельные виджеты или функции z_menu через пaраметр 'child_of'=>'/section-*.html', но куда это вписывать :blink: ?

Добавить id к самому ul так просто не получится (можно наследоваться от виджета меню, если требуется), но следующий код:
<?php
$widget = new zwidget_pagemenu('menu', array(
		'before_widget' => '<div id="menu">',
		'after_widget' => '</div>',
		'childs_of' => '/section', // все 
));
echo $widget->display();
?>

формирует этот html (отступы добавлены для наглядности):
<div id="menu">
  <ul>
	<li class="page_item"><a href="/section/stranitsa1/">Страница1</a></li>
	<li class="page_item"><a href="/section/stranitsa2/">Страница2</a></li>
  </ul>
</div>

Вместо фильтров вида /section-*.html лучше использовать menuid.

Если не нужны class="page_item", то можно создать свой виджет, унаследовавшись от виджета меню, и переписать метод, который определяет классы для пункта меню.

#10 barymdemid

barymdemid

    Активный участник

  • Пользователи Zebrum CMS
  • PipPipPip
  • 78 сообщений

Отправлено 28.05.2010, 16:31

 support (07.12.2009, 21:12) писал:


Добавить id к самому ul так просто не получится

<ul id="top-nav">
			<?php $topmenu = new zwidget_pagemenu('top', array(
	'title' => '', //  Заголовок  блока
	'type' => 'minimal', //  Тип  вывода меню: minimal или full
	 'depth' => 1, //  максимальная  глубина отображаемой вложенности, 0 - неограничена
	'menuid'  => 'top', // тип  меню,  false - все пункты, main - главное меню
	'tag_ul'  => '',
	));
 echo $topmenu->display(array('before_widget'=>'',
							  'before_title'=>'',
							  'after_title' =>'',
							  'after_widget'=>'')
						); ?></ul>
выводит просто список li, а обертка - явно указана. Тогда стили соответствуют от wp тем.




Количество пользователей, читающих эту тему: 0

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