Вывод вопросов в FAQ в нужной последовательности — различия между версиями
Davidov (обсуждение | вклад) (Новая страница: «Макрос %faq category()% выводит последний заданный вопрос внизу страницы. Иногда возникает ситуа…») |
Whoa (обсуждение | вклад) |
||
(не показано 8 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
+ | '''Актуально для версии 18.''' | ||
+ | |||
Макрос %faq category()% выводит последний заданный вопрос внизу страницы. Иногда возникает ситуация, когда требуется вывести вопросы в обратном порядке, то есть последний вопрос вверху страницы. Для этого можно написать кастомный макрос, в котором будет другая последовательность вывода. | Макрос %faq category()% выводит последний заданный вопрос внизу страницы. Иногда возникает ситуация, когда требуется вывести вопросы в обратном порядке, то есть последний вопрос вверху страницы. Для этого можно написать кастомный макрос, в котором будет другая последовательность вывода. | ||
− | В файл ~/classes/modules/faq/_custom.php после строки //TODO: Write here your own macroses нужно добавить код: | + | В файл ~/classes/modules/faq/_custom.php или ~/classes/components/faq/customMacros.php в зависимости от используемой Вами реализации модулей после строки //TODO: Write here your own macroses нужно добавить код: |
<source lang="php"> | <source lang="php"> | ||
public function category_custom($template = "default", $element_path = false, $limit = false, $ignore_paging = false, $order = false) { | public function category_custom($template = "default", $element_path = false, $limit = false, $ignore_paging = false, $order = false) { | ||
− | if( | + | if(def_module::breakMe()) return; |
if(!$template) $template = "default"; | if(!$template) $template = "default"; | ||
list($template_block, $template_block_empty, $template_line) = def_module::loadTemplates("faq/".$template, "questions_block", "questions_block_empty", "questions_block_line"); | list($template_block, $template_block_empty, $template_line) = def_module::loadTemplates("faq/".$template, "questions_block", "questions_block_empty", "questions_block_line"); | ||
− | $category_id = | + | $category_id = def_module::analyzeRequiredPath($path); |
$hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("faq", "question")->getId(); | $hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("faq", "question")->getId(); | ||
Строка 63: | Строка 65: | ||
</source> | </source> | ||
− | + | Также нужно добавить разрешение на использование этого макроса в файле ~/classes/modules/faq/permissions.custom.php или ~/classes/components/faq/permissions.custom.php в зависимости от используемой реализации модулей: | |
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
Строка 74: | Строка 76: | ||
Макрос вызывается аналогично макросу %faq category()% (%faq category_custom()%). | Макрос вызывается аналогично макросу %faq category()% (%faq category_custom()%). | ||
В качестве пятого параметра макрос принимает направление вывода, по умолчанию false, в этом случае первым выведется последний добавленный вопрос, передав пятым параметром значение "1" (true), последний вопрос будет внизу страницы. остальные параметры полностью соответствуют макросу %faq category()%. | В качестве пятого параметра макрос принимает направление вывода, по умолчанию false, в этом случае первым выведется последний добавленный вопрос, передав пятым параметром значение "1" (true), последний вопрос будет внизу страницы. остальные параметры полностью соответствуют макросу %faq category()%. | ||
+ | [[Категория:Написание кастомных макросов]][[Категория:Модуль FAQ]] |
Текущая версия на 10:38, 1 июня 2018
Актуально для версии 18.
Макрос %faq category()% выводит последний заданный вопрос внизу страницы. Иногда возникает ситуация, когда требуется вывести вопросы в обратном порядке, то есть последний вопрос вверху страницы. Для этого можно написать кастомный макрос, в котором будет другая последовательность вывода. В файл ~/classes/modules/faq/_custom.php или ~/classes/components/faq/customMacros.php в зависимости от используемой Вами реализации модулей после строки //TODO: Write here your own macroses нужно добавить код:
public function category_custom($template = "default", $element_path = false, $limit = false, $ignore_paging = false, $order = false) {
if(def_module::breakMe()) return;
if(!$template) $template = "default";
list($template_block, $template_block_empty, $template_line) = def_module::loadTemplates("faq/".$template, "questions_block", "questions_block_empty", "questions_block_line");
$category_id = def_module::analyzeRequiredPath($path);
$hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("faq", "question")->getId();
$per_page = ($limit) ? $limit : $this->per_page;
$curr_page = (int) getRequest('p');
if($ignore_paging) $curr_page = 0;
$sel = new umiSelection;
$sel->addElementType($hierarchy_type_id);
$sel->addHierarchyFilter($category_id);
$sel->addLimit($per_page, $curr_page);
$sel->addPermissions();
$result = umiSelectionsParser::runSelection($sel);
$total = umiSelectionsParser::runSelectionCounts($sel);
if(($sz = sizeof($result)) > 0) {
$block_arr = Array();
$block_arr['total'] = $total;
$block_arr['per_page'] = $per_page;
$lines = Array();
for($i = 0; $i < $sz; $i++) {
if ($order==false){
$ii=$sz-$i-1;
}else{
$ii=$i;
}
if ($ii < $limit || $limit === false) {
$element_id = $result[$ii];
$element = umiHierarchy::getInstance()->getElement($element_id);
if(!$element) continue;
$line_arr = Array();
$line_arr['attribute:id'] = $element_id;
$line_arr['attribute:name'] = $line_arr['void:text'] = $element->getName();
$line_arr['void:alt_name'] = $element->getAltName();
$line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($element_id);
$line_arr['xlink:href'] = "upage://" . $element_id;
$line_arr['question'] = nl2br($element->getValue("question"));
$line_arr['answer'] = ($answer = $element->getValue("answer")) ? nl2br($answer) : nl2br($element->getValue("content"));
templater::pushEditable("faq", "question", $element_id);
$lines []= def_module::parseTemplate($template_line, $line_arr, $element_id);
}
}
$block_arr['subnodes:items'] = $block_arr['void:lines'] = $lines;
return def_module::parseTemplate($template_block, $block_arr, $category_id);
} else {
return $template_block_empty;
}
}
Также нужно добавить разрешение на использование этого макроса в файле ~/classes/modules/faq/permissions.custom.php или ~/classes/components/faq/permissions.custom.php в зависимости от используемой реализации модулей:
<?php
$permissions = Array(
'projects' => Array('category_custom')
);
?>
Макрос вызывается аналогично макросу %faq category()% (%faq category_custom()%). В качестве пятого параметра макрос принимает направление вывода, по умолчанию false, в этом случае первым выведется последний добавленный вопрос, передав пятым параметром значение "1" (true), последний вопрос будет внизу страницы. остальные параметры полностью соответствуют макросу %faq category()%.