Приветствую, дорогой читатель! Сегодня речь пойдёт о доработках компонента AdsManager (доска объявлений для Joomla!), а точнее о том, как сделать меню с ссылками на категории AdsManager внутри компонента - например, на страницах самих категорий.
Техническое задание:
1. На страницах категорий сделать меню с ссылками на опубликованные категории AdsManager;
2. Меню должно отображаться на всех страницах с категориями (в списках объявлений), а также на странице "Все объявления";
3. При переходе в какую-либо категорию должен раскрываться список подкатегорий этой категории;
4. Если посетитель находится в подкатегории, список категорий и список соседних подкатегорий должны отображаться.
Сведения:
Версия Joomla 1.5.15
Версия AdsManager 2.6.5
Задача, казалось бы, простая, ведь на то есть отдельный модуль в стандартной сборке AdsManager. Можно установить его, но в этом случае модуль будет отображаться на всех страницах компонента и придётся искать условия, которые бы позволили скрывать категории на главной странице компонента и на страницах объявлений, а можно приложить немного усилий и встроить функции из этого модуля в сам компонент.
Мне нужно было выводить данное меню только на страницах категорий, поэтому для работы понадобились файлы шаблона list: components/com_adsmanager/views/list/view.html.php и components/com_adsmanager/views/list/tmpl/default.php.
Сначала нам нужно создать саму функцию в файле view.html.php, а также написать несколько строк кода, чтобы заносить в нужные переменные нужные для работы данные.
Открываем файл view.html.php, ищем функцию display() и, например, после строчки
P. S. Чтобы подстроить меню под дизайн сайта, да и вообще как-то украсить ссылки в нём, не забудьте прописать стили для созданных списков ul.
Техническое задание:
1. На страницах категорий сделать меню с ссылками на опубликованные категории AdsManager;
2. Меню должно отображаться на всех страницах с категориями (в списках объявлений), а также на странице "Все объявления";
3. При переходе в какую-либо категорию должен раскрываться список подкатегорий этой категории;
4. Если посетитель находится в подкатегории, список категорий и список соседних подкатегорий должны отображаться.
Сведения:
Версия Joomla 1.5.15
Версия AdsManager 2.6.5
Задача, казалось бы, простая, ведь на то есть отдельный модуль в стандартной сборке AdsManager. Можно установить его, но в этом случае модуль будет отображаться на всех страницах компонента и придётся искать условия, которые бы позволили скрывать категории на главной странице компонента и на страницах объявлений, а можно приложить немного усилий и встроить функции из этого модуля в сам компонент.
Мне нужно было выводить данное меню только на страницах категорий, поэтому для работы понадобились файлы шаблона list: components/com_adsmanager/views/list/view.html.php и components/com_adsmanager/views/list/tmpl/default.php.
Сначала нам нужно создать саму функцию в файле view.html.php, а также написать несколько строк кода, чтобы заносить в нужные переменные нужные для работы данные.
Открываем файл view.html.php, ищем функцию display() и, например, после строчки
$contents = $contentmodel->getContents($filters,$limitstart, $limit,$filter_order,$filter_order_Dir);вставляем следующее
$cats_menu = $catmodel->getCatTree(true,true,$nbcontents);В этом же файле переходим к последней фигурной скобке и вставляем перед ней этот код
$this->assignRef('cats_menu',$cats_menu);
$ccats = $catmodel->getCategories();
$orderlist = array();
foreach($ccats as $v) { $orderlist[$v->id] = $v; }
$this->assignRef('orderlist',$orderlist);
function displayMenuCats($id, $level, &$children, $itemid, $current_list) {Затем открываем файл default.php и в месте, где собираемся выводить меню, вставляем
if (@$children[$id]) {
foreach($children[$id] as $row) { ?>
<li>
<?php
$link = JRoute::_("index.php?option=com_adsmanager&view=list&catid=".$row->id."&Itemid=$itemid");
echo '<a href="'.$link.'">'.$row->name.'</a>';
if(@$current_list[count($current_list) - 1 - $level] == $row->id) {
echo '<ul>';
$this->displayMenuCats($row->id, $level+1, $children, $itemid, $current_list);
echo '</ul>';
}
?>
</li>
<?php
}
}
}
<ul><?phpСохраняем оба файла, загружаем на хостинг и радуемся удобному меню, доступному только на страницах категорий и раскрывающемуся при переходе к подкатегориям. А место на главной странице компонента и страницах объявлений, которое бы занимал модуль mod_adsmanager_menu, лучше занять какой-то более полезной информацией. У меня, например, на главной странице уже есть список всех категорий, поэтому список разделов был совершенно бесполезным; освободившееся пространство я занял «новыми объявлениями».
$current_list[] = $this->catid;
if ($this->catid != -1) {
$current = $this->catid;
while((isset($this->orderlist[$current])) && ($this->orderlist[$current]->parent != 0)) {
$current_list[] = $this->orderlist[$current]->parent;
$current = $this->orderlist[$current]->parent;
}
}
$this->displayMenuCats(0, 0, $this->cats_menu, $this->Itemid, $current_list);
?></ul>
P. S. Чтобы подстроить меню под дизайн сайта, да и вообще как-то украсить ссылки в нём, не забудьте прописать стили для созданных списков ul.
здравствуйте, такой вопрос. статья конечно отличная. ток вот у мня задача другая. объявления каждой категории выводятся отдельно, а вот подкатегории почему-то привязаны к главному меню, т.е. к HOME adsmanagera. как можно решить вопрос вывода объяв из подкатегорий так же как и родительских объяв. а то у мня получается в сайдбаре то что на главке одна горизонтальная полоса топ объявлений, а на других страницах хотелось бы полосу случайных. так вот с подкатегориями получается привязка топа с главки.С уважением, kosmonavtik@inbox.ru
ОтветитьУдалитьБольшое спасибо! В версии AdsManager 2.8 также работает
ОтветитьУдалить