Получение значений полей у родительских страниц любого уровня — различия между версиями
Материал из Umicms
VITL' (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов Используем кастомный макрос, который пропишем в фай…») |
Stexe (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | + | [[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Написание кастомных макросов]] | |
− | + | '''Актуально для версии 2.9.6'''<br/><br/> | |
− | ~classes/modules/custom.php | + | '''Задача:''' Реализовать функционал получения значения полей родительских страниц любого уровня вложенности.<br/><br/> |
− | + | '''Реализация:''' <br/> | |
+ | |||
+ | |||
+ | |||
+ | |||
+ | В файл '''~classes/modules/custom.php''' добавим определение custom макроса valueParent(): | ||
+ | |||
<source lang="php"> | <source lang="php"> | ||
− | + | public function valueParent($id, $level, $field) { | |
− | + | $hierarchy = umiHierarchy::getInstance(); | |
− | + | if ($idParents = $hierarchy->getAllParents($id)) { | |
− | + | if (!array_key_exists($level, $idParents)) | |
− | + | return ""; | |
− | + | $idParent = $idParents[$level]; | |
− | + | ||
− | + | if ($field == "url") { | |
− | + | $content_inst = cmsController::getInstance()->getModule("content"); | |
− | + | return $content_inst->get_page_url($idParent); | |
− | + | } | |
− | + | if (!$value_field = $hierarchy->getElement($idParent)->getValue($field)) | |
− | + | return ""; | |
− | + | return $value_field; | |
− | + | } | |
− | + | return ""; | |
+ | } | ||
</source> | </source> | ||
− | |||
− | |||
+ | Макрос '''valueParent()''' возвращает значение поля с идентификатором '''$field''', страницы которая находится на $'''level''' уровне вложенности в иерархии и является родительской по отношению к странице с id = '''$id'''. | ||
+ | |||
+ | <h2>TPL-шаблонизатор</h2> | ||
+ | |||
+ | Пример вызова макроса: | ||
+ | <source lang="html4strict"> | ||
+ | %custom valueParent(%pid%, 2, h1)% | ||
+ | </source> | ||
+ | <ul> | ||
+ | <li> | ||
+ | Параметр '''$id''': | ||
%pid% - В данном случае id текущей страницы, относительно которой будем брать | %pid% - В данном случае id текущей страницы, относительно которой будем брать | ||
родительскую страницу. | родительскую страницу. | ||
− | + | </li> | |
+ | <li>Параметр '''$level''': | ||
2 - уровень вложенности родительской страницы от корня сайта. | 2 - уровень вложенности родительской страницы от корня сайта. | ||
1 - самый верхний уровень (основные родительские страницы в структуре сайта) | 1 - самый верхний уровень (основные родительские страницы в структуре сайта) | ||
− | + | </li> | |
+ | <li>Параметр '''$field''': | ||
h1 - идентификатор поля, значение которого надо получить. | h1 - идентификатор поля, значение которого надо получить. | ||
Если третьим параметром передан "url", то будет получена ссылка на страницу | Если третьим параметром передан "url", то будет получена ссылка на страницу | ||
родителя. | родителя. | ||
+ | </li> | ||
+ | </ul> | ||
+ | <h2>XSLT-шаблонизатор</h2> | ||
+ | Пример вызова макроса: | ||
+ | <source lang="xml"> | ||
+ | <xsl:value-of select="document(concat('udata://custom/valueParent/', page/@id,'/2/h1'))/udata"/> | ||
+ | </source> |
Текущая версия на 05:54, 27 апреля 2014
Актуально для версии 2.9.6
Задача: Реализовать функционал получения значения полей родительских страниц любого уровня вложенности.
Реализация:
В файл ~classes/modules/custom.php добавим определение custom макроса valueParent():
public function valueParent($id, $level, $field) {
$hierarchy = umiHierarchy::getInstance();
if ($idParents = $hierarchy->getAllParents($id)) {
if (!array_key_exists($level, $idParents))
return "";
$idParent = $idParents[$level];
if ($field == "url") {
$content_inst = cmsController::getInstance()->getModule("content");
return $content_inst->get_page_url($idParent);
}
if (!$value_field = $hierarchy->getElement($idParent)->getValue($field))
return "";
return $value_field;
}
return "";
}
Макрос valueParent() возвращает значение поля с идентификатором $field, страницы которая находится на $level уровне вложенности в иерархии и является родительской по отношению к странице с id = $id.
TPL-шаблонизатор
Пример вызова макроса:
%custom valueParent(%pid%, 2, h1)%
- Параметр $id: %pid% - В данном случае id текущей страницы, относительно которой будем брать родительскую страницу.
- Параметр $level: 2 - уровень вложенности родительской страницы от корня сайта. 1 - самый верхний уровень (основные родительские страницы в структуре сайта)
- Параметр $field: h1 - идентификатор поля, значение которого надо получить. Если третьим параметром передан "url", то будет получена ссылка на страницу родителя.
XSLT-шаблонизатор
Пример вызова макроса:
<xsl:value-of select="document(concat('udata://custom/valueParent/', page/@id,'/2/h1'))/udata"/>