Добавление вопроса на странице проекта с выбором категории (XSLT)

Материал из Umicms
Перейти к:навигация, поиск


Задача: Реализовать возможность добавления вопроса на странице проекта FAQ с возможностью выбора категории вопроса.

Реализация:
Напишем кастомный макрос, возвращающий все категории вопросов проекта, id которого нужно передать в параметре $project_id. Код макрос можно поместить в файл classes\modules\faq\__custom.php

public function getCategoriesList($project_id){
	if (!$project_id)
		return 'Не передано id проекта';
	$hierarchy = umiHierarchy::getInstance();
	$list = $hierarchy->getChilds($project_id,false,true,1);
	if (!is_array($list))
		return 'Передан некорректный id проекта';
	$arr = Array();
	$block_arr = Array();
			
	foreach($list as $id=>$value){
		$element = $hierarchy->getElement($id);
		if ($element instanceof umiHierarchyElement){
			$arr['node:value'] = $element->getName();
			$arr['attribute:id'] = $id;
			$block_arr['nodes:item'][] = $arr;
		}
					
	}
			
			
	return $block_arr;
}

Далее, в файл classes\modules\faq\permissions.custom.php нужно поместить следующий код:

<?php
	$permissions = Array(
		'projects_list' => Array('getCategoriesList'));
?>

В шаблон вывода проекта FAQ (в demodizzy файл templates\demodizzy\xslt\modules\faq\project.xsl) нужно добавить вызов макроса addQuestionForm и скрипт обработки выбранного элемента выпадающего списка:

<xsl:apply-templates select="document('udata://faq/addQuestionForm//')/udata" />
<script>
	$('#postQ').click(function(){
		var id = $("#category :selected").val();
		$('#formQ').attr('action','/faq/post_question/'+id+'/');
	});
</script>

В шаблоне вывода результатов работы макроса addQuestionForm(), @method=addQuestionForm (в demodizzy файл templates\demodizzy\xslt\modules\faq\addQuestionForm.xsl) нужно добавить атрибут id="formQ":

<form method="post" action="{action}" id="formQ" onsubmit="site.forms.data.save(this); return site.forms.data.check(this);">

А для кнопки - id="postQ":

<input type="submit" class="button" value="Задать вопрос" id="postQ" />

Также в этот шаблон нужно добавить элементы для вывода выпадающего списка:

<div class="form_element">
	<label class="required">
		<span><xsl:text>Выберите категорию вопроса:</xsl:text></span>
		<select id="category">
			<xsl:apply-templates select="document(concat('udata://faq/getCategoriesList/',$document-page-id))/udata/item"/>
		</select>
	</label>
</div>

И наконец, в файле этого же шаблона, нужно добавить следующий шаблон:

<xsl:template match="udata[@method='getCategoriesList']/item">
	<option value="{@id}"><xsl:value-of select="."/></option>
</xsl:template>