zoo_logo.png

Далее будут перечислены основные, используемые мной в коде конструкции, замечательного компонента - ZOO.




Как получить URL на страницу item

echo $this->app->route->item($item);

Если потребуется получить не SEF ссылку, то вторым параметром подаем false

echo $this->app->route->item($item, false);

А уже из этого адреса при помощи Route::_ можно сделать полный URL. Про это почитайте в статье Joomla сниппеты

Как получить URL на страницу категории

echo $this->app->route->category($category);

Получить доступ к настройкам элемента из шаблона

При создании различных форм, фильтров и т.д. часто бывают необходимы данные из настроек элемента. Стандартная документация говорит, что нужно брать элемент у item. Бывают ситуации, когда item нет, и тогда можно воспользоваться следующей конструкцией.

$val = $this->application->getType('tovar')->getElementConfig('d0f2d6c2-cb88-45b9-91cd-989a85dc5f6b');
foreach ($val->option as $option) { ?>
    <label><input name="<?=$option['value']?>" type="checkbox"><?=$option['name']?></label>                           
<? }

Где tovar это название приложения. Точно также можно выдернуть вообще все элементы:

$val = $this->application->getType('tovar')->getElements();

Выведет массив ключей, всех элементов приложения

Как получить item по его id из любого места в ZOO

$item_id = jFactory::getApplication()->input->get('id', 0, 'INT');
require_once(JPATH_ADMINISTRATOR.'/components/com_zoo/config.php');
$zoo = App::getInstance('zoo');
$application = $zoo->table->application->get(1);
$item = $zoo->table->item->get($item_id);

Тут стоит обратить внимание на переменную $zoo. Это эквивалент $this->app из предыдущих примеров. Теперь и их можно использовать где угодно в Joomla

А у $zoo->table->item еще много интеречных и полезных методов. Просто оставлю их тут. Уверен вам они будут полезны

save
delete
hit
getApplicationItemCount
getTypeItemCount
findAll
getByIds
getByCharacter
getByTag
getByType
getByCategory
getPrevNext
getByUser
getItemCountByUser
getFromCategory
getItemCountFromCategory
search
searchElements
getUsers
isInitialized
getTableColumns
get
first
all
find
count
unsetObject
has

Т.е. использовать можно так

$zoo->table->item->getByIds([1, 2, 3]);

Как получить все элементы из определенной позиции в Joomla ZOO

Порой, необходимо вытащить из item значения всех его элементов, находящихся в определенной позиции. Это проблематично сделать. Но возможно. И вот как:

require_once(JPATH_ADMINISTRATOR.'/components/com_zoo/config.php');
$zoo = App::getInstance('zoo');
$application = $zoo->table->application->get(1);
$render = $zoo->renderer->create('item')->addPath(array($zoo->path->path('component.site:'), $application->getTemplate()->getPath()));
$item = $zoo->table->item->get($item_id);
$render->setItem($item);
$render->setlayout('prices');
$elements_by_positions = $render->getPositionElements('prices');

У меня в позиции prices из лейаута prices находились какие-то элементы. Таким образом мы их все вытащили. И можем посмотреть их значения. Полезно таким образом группировать какие-то свойства у элемента. Я, как вы вероятно догадались, хранил в этой позиции элементы цен, для различного количества товара.

Делалось это все для корзины. В ней надо было проверить какую цену назначать товару, при этом количестве товара. Можно было конечно жестко зашить id всех используемых элементов. Но предпологалось, что заказчик сможет добавить туда еще позиции. И тогда бы ничего не работало.

Оставлять комментарии могут только зарегистрированные пользователи