Далее будут перечислены основные, используемые мной в коде конструкции, замечательного компонента - 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 всех используемых элементов. Но предпологалось, что заказчик сможет добавить туда еще позиции. И тогда бы ничего не работало.