Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Не выводится дополнительное меню в версии "Start"

Автор BabajkaРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 3624
Последний ответ 10 Января 2013, 10:08:04
от admin
Магазин "Современный" - добавление заголовка к левому меню каталога

Автор manadsgnРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 4066
Последний ответ 25 Июня 2012, 17:33:00
от manadsgn
Вывод страницы в меню с отключением вывода в карте сайта

Автор alpotemkinРаздел Макросы UMI.CMS

Ответов: 6
Просмотров: 5663
Последний ответ 03 Ноября 2011, 15:07:29
от alpotemkin
Текущая страница - добавление класса к ссылке главного меню

Автор manadsgnРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 3017
Последний ответ 24 Июня 2012, 14:00:10
от manadsgn
Вывод в меню только разделов с определенными свойствами

Автор poloРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 5544
Последний ответ 24 Июня 2011, 12:58:58
от polo

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

*

danger

  • *
  • 6
  • +0/-0
    • Просмотр профиля
Есть три пункта меню "Проекты": эконом, комфорт, премиум:
<items>
<item id="7" link="/proekty/ekonom/" name="Эконом" alt-name="ekonom" xlink:href="upage://7">Эконом</item>
<item id="8" link="/proekty/komfort/" name="Комфорт" alt-name="komfort" xlink:href="upage://8">Комфорт</item>
<item id="9" link="/proekty/premium/" name="Премиум" alt-name="premium" xlink:href="upage://9">Премиум</item>
</items>
<?php foreach ($variables['items']['nodes:item'] as $item): ?>          
 <?=$item['node:text']?>
 <?php endforeach; ?>
Мне нужно по id страницы вставить в пункты меню картинки и некоторый текст, сначала пишу:
<?= $this->getPageById(7)->getValue('cena') ?>
Получаю под каждым пунктом цену эконома, тогда пробую следующее:
<?= $this->getPageById($item['attribute:id'])->getValue('cena') ?>
Понятно, что не правильно, непонятно, как правильно!!! Спасайте!! Метод тыка не помогает!!!

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
php шаблонизатор?

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Для начала

<?php foreach ($variables['items']['nodes:item'] as $item): ?>          
 <?var_dump($item);?>
 <?php endforeach; ?>
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

vicliner

  • *
  • 8
  • +1/-1
    • Просмотр профиля
e.ioffe, в переменной кроме ID нетникакой полезной информации. Поэтому ваш совет можно считать бесполезным.

danger, я решил задачу так:

   <ul>
        <? $hierarchy = umiHierarchy::getInstance();?>
        <?php foreach ($variables['items']['nodes:item'] as $item): ?>
           <li class="item">
            <? $page = $hierarchy->getElement($item['@id']); ?>
               <a href="<?=$item['@link']?>" class="name_link"><?=$item['node:text']?></a>
               Дополнительное поле ---> <?=$page->getValue('sub_title');?>
            </li>
            <?php endforeach; ?>
        </ul>


Еще как вариант вместо <?=$page->getValue('sub_title');?> использовать <?=$page->sub_title;?>

Документация http://api.docs.umi-cms.ru/spravochnik_po_klassam_yadra_umicms/model_ierarhii/umihierarchyelement/
« Последнее редактирование: 13 Февраля 2016, 21:50:00 от vicliner »

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
про extProps и extGroups не слышали???

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
   <ul>
        <? $hierarchy = umiHierarchy::getInstance();?>
        <?php foreach ($variables['items']['nodes:item'] as $item): ?>
           <li class="item">
            <? $page = $hierarchy->getElement($item['@id']); ?>
               <a href="<?=$item['@link']?>" class="name_link"><?=$item['node:text']?></a>
               Дополнительное поле ---> <?=$page->getValue('sub_title');?>
            </li>
            <?php endforeach; ?>
        </ul>

В php-шаблонизаторе есть helper getPageById();, который делает все то же, что и
$hierarchy = umiHierarchy::getInstance();
, но много изящнее.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

vicliner

  • *
  • 8
  • +1/-1
    • Просмотр профиля
Согласен!

Но недавно общался с тех.поддержкой по этому поводу.
Спросил что лучше использовать  extProps и extGroups  или  $hierarchy = umiHierarchy::getInstance();
Вот ответ:
Проще всего это сделать через extProps или extGroups.
Ваш вариант может повлиять на быстродействие сайта в большей степени чем вывод свойств через параметр extProps.

Так что лучше крутить extProps или extGroups, как и посоветовал  crazygeorgio.

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Мой опыт подсказывает, что без включенного кеша extProps и extGroups для php медленнее, чем получение значений напрямую из объекта. Разница становится ощутимой при использовании extGroups с большим количеством полей (более 10).
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
С кешем и количеством полей запутал немного, т.е. если полей много, то лучше обращаться напрямую к объекту, если немного, то не имеет особой разницы? Так твой опыт подсказывает? Или вообще в принципе быстрее использовать обращение напрямую без кеша?

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
По кешированию.

Если на сайте включено кеширование, то параметры, переданные в extProps и extGroups попадут в кеш. Поэтому первый запрос будет тяжелым (все данные сохраняются в кеш), а последующие - легкими (все данные забираются из кеша).

По скорости работы.

Измерял на нескольких магазинах на разных хостингах с выключенным кешем (при включении могут быть другие результаты). Запрос вида
 $this->macros('catalog', 'getObjectsList', array(), array('price'), array('object_item_properties'))


где extProps = price и extGroups = 'object_item_properties' и его обработка средствами php выполнялись дольше, чем

 
$entity = $this->getPageById($item['attribute:id']);
$price = $entity->getValue('price');
$objectProperty1 = $entity->getValue('property_1');
$objectProperty2 = $entity->getValue('property_2');
$objectProperty3 = $entity->getValue('property_3');

Для себя пришел к выводу, что для простых случаев можно использовать getPageById, а для сложных лучше писать свои кастомы, которые возвращают что-то вроде

array('items' => array('nodes:item' => array(
array(
'attribute:id' => $id,
'node:text' => $name,
'price' => $price,
'property_1' => $property1,
'property_2' => $property2
)
));

Кеш юми стараюсь включать как можно реже, так как иногда дает непредсказуемый результат (последний билд с кешем еще не тестировал).
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Согласен с e.ioffe, кеширование реально очень часто дает непредсказуемый результат.
И раз уж тут подняли эту тему - может стоит попросить юмивцев сделать нестройки кеша не методом исключения, а методом включения? Ну то есть сейчас можно сказать: не кешируй вот это и вот это. А логичнее было бы сказать: кешируй вот это и вот это. Тогда и управляемость остается и предсказуемость гораздо выше, ведь так?
Мой блог http://umicms.me