ZOO (JBZoo) Как получить значение самописного элемента по его ID и поместить его в title

  • 1 Ответов
  • 1077 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

anorov

  • *
  • 3
  • 0
Предыстория:
Спойлер
[свернуть]
Задача: вытащить в title наименование товара, содержащиеся в самописном элементе с ID типа b456a760-7544-4bb8-ada2-4562cb55acbc
Почитав похожие темы, например http://joomlaforum.ru/index.php/topic,288287.0.html, ничего путного я не нашел. Выпадала та же ошибка, а ответа там я не получил.

Кароче говоря, мой способ выйти из ситуации:

Нужный элемент помещаем в специально созданную позицию.
В переменную засовываем значение этой позиции.
Делаем с ней, что считаем нужным.

Вот такой вот код я засунул в шаблон вывода материала
Код
$mytitle = $this->renderPosition('title');
$doc = JFactory::getDocument();
$doc->setTitle($mytitle);

Вот такой вот идиотский способ.  ::)
Может быть есть способ получить эти данные более приемлемым способом?

Теги: Element ID, Fatal error: Call to a member function getElement() on a non-object in

*

anorov

  • *
  • 3
  • 0
Снова всплыла эта тема, но первоначальное решение уже не канало.

Задача: на картинках товаров на странице категории генерировать различные alt и title в зависимости от названия товара.

Проблема: на странице категории нельзя выводить позицию какого-то конкретного элемента каталога, а картинки надо подписывать каждую по-своему.

Решение: т.к. так и не смог найти толкового решения по добыванию самописного элемента по ID, написал свой хелпер (как добавлять хелпер написано тут http://jbzoo.ru/docs/basic-api-jbzoo-and-zoo).

Код вызова процедуры:
Код
$elements 	= $this->getItem()->elements;  // получаем значения всех дополнительных самописных элементов в виде строки
$itemName = $this->app->myhelper->getElementByID($elements,'ID_самописного_элемента');

Код процедуры внутри хелпера:
Код
public function getElementByID($elements,$elementID) {

$forDelete = array("\n","\t"); // удаляем переносы и табуляции
$elements = str_replace($forDelete,"",$elements);

preg_match_all('/'.$elementID.'(.*?)value\":.\"(.*?)\"/',$elements,$matches);  // выдергиваем значение элемента

$str = strtoupper($matches[2][0]);

$value = strtr($str, array("\U0430"=>"а", "\U0431"=>"б", "\U0432"=>"в",
"\U0433"=>"г", "\U0434"=>"д", "\U0435"=>"е", "\U0451"=>"ё", "\U0436"=>"ж", "\U0437"=>"з", "\U0438"=>"и",
"\U0439"=>"й", "\U043A"=>"к", "\U043B"=>"л", "\U043C"=>"м", "\U043D"=>"н", "\U043E"=>"о", "\U043F"=>"п",
"\U0440"=>"р", "\U0441"=>"с", "\U0442"=>"т", "\U0443"=>"у", "\U0444"=>"ф", "\U0445"=>"х", "\U0446"=>"ц",
"\U0447"=>"ч", "\U0448"=>"ш", "\U0449"=>"щ", "\U044A"=>"ъ", "\U044B"=>"ы", "\U044C"=>"ь", "\U044D"=>"э",
"\U044E"=>"ю", "\U044F"=>"я", "\U0410"=>"А", "\U0411"=>"Б", "\U0412"=>"В", "\U0413"=>"Г", "\U0414"=>"Д",
"\U0415"=>"Е", "\U0401"=>"Ё", "\U0416"=>"Ж", "\U0417"=>"З", "\U0418"=>"И", "\U0419"=>"Й", "\U041A"=>"К",
"\U041B"=>"Л", "\U041C"=>"М", "\U041D"=>"Н", "\U041E"=>"О", "\U041F"=>"П", "\U0420"=>"Р", "\U0421"=>"С",
"\U0422"=>"Т", "\U0423"=>"У", "\U0424"=>"Ф", "\U0425"=>"Х", "\U0426"=>"Ц", "\U0427"=>"Ч", "\U0428"=>"Ш",
"\U0429"=>"Щ", "\U042A"=>"Ъ", "\U042B"=>"Ы", "\U042C"=>"Ь", "\U042D"=>"Э", "\U042E"=>"Ю", "\U042F"=>"Я")
); // преобразуем все это барахло в русский текст (латиница и знаки приезжают в нормальном виде)

return $value;
    }

Процедура написана для элемента с типом текст. Для остальных типов пишется аналогично. Какие есть поля у элемента можно посмотреть в MySQL zoo_item -> elements.
У меня работает, может и кому-то поможет.