Как из шаблона Joomla получить Alias текущего приложения JBZoo
#1
Posted 18 August 2012 - 22:01
Как из шаблона Joomla (те, что находятся в папке templates) получить Alias текущего приложения JBZoo?
Надо в шаблоне Joomla обрабатывать элементы (item) одного из приложений JBZoo (привязываться по алиасу меню не получается, так не получится угадать, к какому меню будет привязан элемент (item)), чтобы выводить это приложение особым способом. Одним CSS обойтись не получается, надо изменять верстку.
Помогите пожалуйста.
p.s. возможно у Вас есть какая-то информация по апи для зуу, которая поможет избежать подобных вопросов - поделитесь пожалуйста.
Заранее спасибо.
#2
Posted 18 August 2012 - 23:54
<?php
require_once(JPATH_BASE . "/administrator/components/com_zoo/classes/application.php"); // Подключаем скрипт контроллера приложения
$zoo = App::getInstance('zoo'); // Создаем новый экземпляр объекта ZOO
$app = $zoo->zoo->getApplication(); // Получаем текущее приложение ZOO
$app_name = $app->name; // Имя приложения
$app_alias = $app->alias; // Алиас приложения
?>
Информации по API ZOO есть только крупицы, даже на сайте разработчиков (http://www.yootheme....ation?view=docs)
А так, при допиливании кода приходится часами внимательно просматривать каждый контроллер в поисках нужной функции или свойства, чтобы не придумывать велосипед и делать все по уму, используя только API ZOO.
«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.
#3
Posted 19 August 2012 - 04:55
Небольшая подправочка.
Контроллер не обязательно подключать. Это немного не то.
Нужно включать конфиг. В нем происходит инициализация Zoo.
require_once(JPATH_ADMINISTRATOR.'/components/com_zoo/config.php');
Следующая строка кода не создает новый экземпляр, а вернет существующий инстанс. Это синглетон. Создание происходит только в первый вызов.
Это важно, если работаете с событиями Zoo.
$zoo = App::getInstance('zoo');
Дополнительный способ
Если заранее известен ID приложения, например из адреса или POST, то можно сделать так
<?php
$appId = JRequest::getVar('app_id');
$zoo = App::getInstance('zoo'); // объект приложения, через который доступны любые хелперы Zoo и JBZoo
$application = $zoo->table->application->get($appId);
$application->alias // берем алиас из приложения.
Кратко о хелперах Zoo (API компонента)
Хелпер - это маленький вспомогательный класс, который зачастую хранит в себе очень полезные функции системы.
Практически любой объект из Zoo имеет ссылку на основной объект приложения. Примерно так
<?php $item->app; $app->app; $category->app; $this->app;Этот объект тоже самое что и
$zoo = App::getInstance('zoo');
Через него можно вызывать любые хелперы компонента Zoo. Например, вот так можно получить ссылку до материала
<?php
$itemId = 15; // например для материала с ID = 15
$zoo = App::getInstance('zoo');
$item = $zoo->table->item->get($itemId); // обратились к хелперу table, который вернул модель таблицы zoo_item
$itemUrl = $zoo->route->item($item); // через хелпер route получаем ссылку на материал
$itemUrl = JRoute::_($itemUrl); // применяем SEF
Список хелперов можно подсмотреть тут
administrator\components\com_zoo\framework\helpers\
administrator\components\com_zoo\helpers\
media\zoo\applications\jbuniversal\framework\helpers\
Отключайте проверку лицензий как можно скорее!
— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.
#4
Posted 19 August 2012 - 09:02
«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.
#5
Posted 19 August 2012 - 16:38
#6
Posted 19 February 2013 - 19:34
#7
Posted 20 February 2013 - 06:05
Скопируйте уже сгенерированную ссылку и вставьте в нужное место.Добрый вечер всем! А как в начале Joomla-шаблона, еще до загрузки zoo/jbzoo компонента вызвать, к примеру, функции сравнения товаров или избранного? Есть необходимость разместить ссылку на просмотр избранного/сравнения непосредственно в шапке, а не рядом с товаром. Спасибо заранее.
Отключайте проверку лицензий как можно скорее!
— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.
#8
Posted 20 February 2013 - 09:35
Денис, по поводу Избранного - действительно протупил :-) А как мне на стадии рендеринга общего шаблона Joomla понять - показывать или нет ссылку на сравнение, например если еще нет товаров в сравнении. В карточке товара используется метод isExists($this->getItem()). Есть ли возможность как-то проводить подобную проверку вне ZooСкопируйте уже сгенерированную ссылку и вставьте в нужное место.
#9
Posted 21 February 2013 - 05:34
Хм, попробуйте сделать такДенис, по поводу Избранного - действительно протупил :-) А как мне на стадии рендеринга общего шаблона Joomla понять - показывать или нет ссылку на сравнение, например если еще нет товаров в сравнении. В карточке товара используется метод isExists($this->getItem()). Есть ли возможность как-то проводить подобную проверку вне Zoo
<?php
$zooApp = App::getInstance('zoo');
$items = $zooApp->jbfavorite->getAllItems();
if (!empty($items)) {
echo '<a href="'.$zooApp->jbrouter->favorite(<ID пункта меню>, <ID каталога>).'">Избранное</a>';
}
Отключайте проверку лицензий как можно скорее!
— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.
#10
Posted 21 February 2013 - 14:25
Денис, спасибо большое! Сработало. По аналогии с Избранным для "Сравнения":Хм, попробуйте сделать так
<?php
$zooApp = App::getInstance('zoo');
$jbitems = $zooApp->jbcompare->getAllItems();
if (!empty($jbitems)) {
echo '<a href="' . $zooApp->jbrouter->compare(<Itemid>, '<Horizontal / Vertical>', '<Тип, который сравниваем>', <ID приложения>) . '">Сравнение</a>';
}


This topic is locked








