Page 1 of 1

Контент другой страницы

Posted: Tue Aug 25, 2009 2:02 pm
by tyu
Привет!
Можно ли вставить в шаблон страницы {content} от другой страницы (через ее ID или алиас)?

Re: Контент другой страницы

Posted: Tue Aug 25, 2009 3:02 pm
by von-hamster
Можно... Как это сделать - ищи - что-то подобное было на форуме... В любом случае придется писать свой тэг.

Re: Контент другой страницы

Posted: Sat Aug 29, 2009 8:19 am
by skyboy
вопрос по структуре: может, если некий контент настолько универсальный, что появляется не на одной странице, а на нескольких, есть смысл вынести управление им(ими?) под отдельный модуль? или хотя бы в блок глобального контента?
мне сложно представить ситуацию, когда надо вывести именно кусок другой страницы(потому как страница, в отличие от вывода какого-то модуля предполагает вывод не только информации, но и собственного оформления - если же оформление особого нет, то это просто глобальный блок контента же!)

Re: Контент другой страницы

Posted: Mon Aug 31, 2009 5:09 am
by tyu
Структура страниц по уровням:

1
1.1
1.1.1
1.1.2
1.1.3
1.2
1.3

2
2.1
2.2

и т. д.

На странице 1 выводится контент от 1.1, 1.2, 1.3.
На странице 1.1 выводится контент от 1.1.1, 1.1.2, 1.1.3.
На странице 2 выводится контент от 2.1, 2.2.
И так далее...

Вот что требуется реализовать...

Пример: http://www.virgin.com/travel/, серые вкладки.

Re: Контент другой страницы

Posted: Wed Sep 09, 2009 10:57 pm
by m00nk
Делюсь своими наработками.

Получение контента нужной страницы
Выводимый контент будет содержать необработанные смарти-тэги

$hm =& $gCms->GetHierarchyManager();
$curnode =& $hm->getNodeById($pageid); // либо $curnode =& $hm->getNodeByAlias($page_alias);
$curcontent =& $curnode->GetContent();
echo $curcontent->mProperties->mPropertyValues['content_en'];

ВНИМАНИЕ!!!
Описанный алгоритм работает не всегда. По какой-то неясной мне причине иногда массив $curcontent->mProperties->mPropertyValues содержит пустые значения. Поэтому лучше для надежности применять следующий вариант:

если известен только элиас, и не известен ID:
$hm =& $gCms->GetHierarchyManager();
$curnode =& $hm->getNodeByAlias($alias);
$curcontent =& $curnode->GetContent();
$contentops =& $gCms->GetContentOperations();
$content =& $contentops->LoadContentFromId($curcontent->mId, true);
echo $content->mProperties->mPropertyValues['content_en'];

если же известен ID, то (теоретически, я не проверял) можно сократить код до такого:
$contentops =& $gCms->GetContentOperations();
$content =& $contentops->LoadContentFromId($Id, true);
echo $content->mProperties->mPropertyValues['content_en'];

Re: Контент другой страницы

Posted: Thu Sep 10, 2009 4:46 am
by von-hamster
ВНИМАНИЕ!!!
Описанный алгоритм работает не всегда. По какой-то неясной мне причине иногда массив $curcontent->mProperties->mPropertyValues содержит пустые значения. Поэтому лучше для надежности применять следующий вариант:
Он будет работать всегда, если вначале загрузить свойства...
$curcontent->mProperties->load($page_id);

или не напрямую обращаться к свойству, а через метод:
$curcontent->GetPropertyValue($name);
где, например, $name = 'content_en';

Re: Контент другой страницы

Posted: Thu Sep 10, 2009 9:39 am
by m00nk
Спасибо за подсказку, как-нить попробую на практике.

А вообще было бы очень здорово, если бы авторы нашли время, чтобы написать нормальную документацию по API, а не отделываться от разработчиков парой статей...  :-[

Re: Контент другой страницы

Posted: Thu Sep 10, 2009 9:47 am
by von-hamster
На самом деле API описано в коде... Другое дело - его нужно оттуда достать... Например при помощи phpdocumentor'a

Re: Контент другой страницы

Posted: Thu Sep 10, 2009 2:59 pm
by m00nk
На самом деле API описано в коде... Другое дело - его нужно оттуда достать...

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

ЗЫ
Нас тут банить за флуд не начнут? ;)

ЗЗЫ
Кстати, вопрос: можно ли как-то роутами заставить КМС обрабатывать урлы по принципу /module/action/par/par/par/ ?
А то она пытается элиас найти, а мне надо, чтоб модуль искала...

Re: Контент другой страницы

Posted: Thu Sep 10, 2009 10:46 pm
by tyu
m00nk wrote: Делюсь своими наработками.
Выводимый контент будет содержать необработанные смарти-тэги
Здорово! Спасибо! Все получилось. Только вот как бы там смарти-тэги обработать?..:)

Re: Контент другой страницы

Posted: Fri Sep 11, 2009 5:11 am
by von-hamster
Тэг eval тебе поможет