Вывод на сайте анонса случайной новости, статьи, картинки средствами XSLT

На днях случайно наткнулся на статью "Вывод на сайте текста случайной статьи или отзыва". Суть статьи в том, чтоб вывести на сайте случайным образом содержимое какой-либо страницы.

Статейка не большая, а решение интересное. Единственный для меня минус в том, что в итоге кастомный макрос обрабатывается средствами TPL-шаблонизатора. А с TPL-шаблонизатором я ну вообще никак, а сайты разрабатываю исключительно с применением XSLT.

Итак, задача ясна. Для начала приведу код кастомной функции из статьи ссылка на которую есть выше.

public function random_child_id($element_id) {
    $childs = Array();
    $childs = umiHierarchy::getInstance()->getChilds($element_id);
    $rand_element = array_rand($childs, 1);
    return $rand_element;
}

Как и положенно, размещаем эту функцию в файле /classes/modules/custom.php сразу после строки //TODO: Write your own macroses here.

Теперь в шаблоне, где планируем вывод нашей случайной информации пропишем следующий код:

<xsl:apply-templates select="result" mode="random" />

Ну и давайте теперь напишем сам шаблон который и будет выводить результат работы кастомного макроса. Я приведу пример своего шаблона, который выводит на этом сайте случайные работы из раздела "Портфолио".

<xsl:template match="result" mode="random" >
    <xsl:variable name="var_random_id" select="document('udata://custom/random_child_id/(7)')" />
    <xsl:variable name="filepath_1" select="document(concat('upage://', $var_random_id,'.publish_pic'))//value/@path" />
    <xsl:variable name="var_random_id_h1" select="document(concat('upage://', $var_random_id,'.h1'))/udata/property/value" />
    <div class="random">
        <h3>Случайная работа из портфолио:<h3>
        
	<img alt="{$var_random_id_h1}" title="{$var_random_id_h1}">
	    <xsl:attribute name="src">
		<xsl:value-of select="document(concat('udata://system/makeThumbnailFull/(', $filepath_1, ')/200/200/notemplate/0/1/2'))//src" />
	    </xsl:attribute>
	</img>
    </div>
</xsl:template >

Да кстати, цыфра (7) что фигуриррует в записи в переменной var_random_id - это ID страницы родителя, от куда будут браться содержимое случайных страниц.

16.11.2011