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


Фотография
- - - - -

Как из шаблона Joomla получить Alias текущего приложения JBZoo


  • Закрытая тема Тема закрыта
Сообщений в теме: 10

#1 werewolfgsm

werewolfgsm

Отправлено 18 August 2012 - 22:01

Добрый день! Вопрос хоть и не из области JBZoo, но возможно Вы не побрезгуете помочь.
Как из шаблона Joomla (те, что находятся в папке templates) получить Alias текущего приложения JBZoo?
Надо в шаблоне Joomla обрабатывать элементы (item) одного из приложений JBZoo (привязываться по алиасу меню не получается, так не получится угадать, к какому меню будет привязан элемент (item)), чтобы выводить это приложение особым способом. Одним CSS обойтись не получается, надо изменять верстку.
Помогите пожалуйста.

p.s. возможно у Вас есть какая-то информация по апи для зуу, которая поможет избежать подобных вопросов - поделитесь пожалуйста.
Заранее спасибо.
  • 0

#2 Станислав

Станислав

Отправлено 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.


  • 0

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#3 SmetDenis

SmetDenis

Отправлено 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\

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 Станислав

Станислав

Отправлено 19 August 2012 - 09:02

Спасибо за разъяснения, Денис :) Это еще раз доказывает, что чем больше проводишь времени за решением определенных задач, тем лучше знаешь суть вопроса  ;)



  • 0

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#5 werewolfgsm

werewolfgsm

Отправлено 19 August 2012 - 16:38

Спасибо огромнейшее!
  • 0

#6 pinmaster751

pinmaster751

Отправлено 19 February 2013 - 19:34

Добрый вечер всем! А как в начале Joomla-шаблона, еще до загрузки zoo/jbzoo компонента вызвать, к примеру, функции сравнения товаров или избранного? Есть необходимость разместить ссылку на просмотр избранного/сравнения непосредственно в шапке, а не рядом с  товаром. Спасибо заранее.
  • 0

#7 SmetDenis

SmetDenis

Отправлено 20 February 2013 - 06:05

Добрый вечер всем! А как в начале Joomla-шаблона, еще до загрузки zoo/jbzoo компонента вызвать, к примеру, функции сравнения товаров или избранного? Есть необходимость разместить ссылку на просмотр избранного/сравнения непосредственно в шапке, а не рядом с  товаром. Спасибо заранее.

Скопируйте уже сгенерированную ссылку и вставьте в нужное место.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#8 pinmaster751

pinmaster751

Отправлено 20 February 2013 - 09:35

Скопируйте уже сгенерированную ссылку и вставьте в нужное место.

Денис, по поводу Избранного - действительно протупил :-) А как мне на стадии рендеринга общего шаблона Joomla понять - показывать или нет ссылку на сравнение, например если еще нет товаров в сравнении. В карточке товара используется метод        isExists($this->getItem()). Есть ли возможность как-то проводить подобную проверку вне Zoo
  • 0

#9 SmetDenis

SmetDenis

Отправлено 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>';
}

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#10 pinmaster751

pinmaster751

Отправлено 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>';
}

  • 0




Click to return to top of page in style!