Правильно! Только в описании метода в api есть маленькая неточность - метод возвращает нам не значение типа boolaen, а значение типа string, что нам как раз и нужно.
Теперь представим себе, что у нас есть массив с идентификаторами тех ИС, из которых нам нужно вывести теги:
$infosystemstoshow = array(1, 2, 3, 5)
надо прогнать через метод GetXml4Tags() все элементы данного массива, чтобы получить от них теги, и все их записать в одну и ту же переменную $xml
То что получится в итоге, можно будет показать на экран командой
echo htmlspecialchars($xml);
и сравнить с обычным xml для меток, на предмет того, чего же еще нам не хватает.
Я в отчаянии! Не могу заставить работать. Ну никак!. Выводит простое облако тэгов хотя вроде все правильно сделал!
Константа ALLOW_FORMAT_XSL_HTML false активна
Файлики загружены права 666 пути правильные.
Фрагмент шаблона странички:
<?php
/* Отображаем тэги ИС */
// автоматическое определение id текущей инфосистемы из настроек структуры
// для шаблона главной страницы нужно вбить id вручную,
// заменив следующую строку, например, на $InformationSystemId = 1;
$InformationSystemId = to_int($GLOBALS['LA']['InformationSystemID']);
$xsl_name = 'УниверсальноеОблакоТэговCumulus';
// Определим текущий домен сайта, для передачи его в XML
$site = &singleton('site');
$alias_row = $site->GetAlias($_SERVER['HTTP_HOST']);
$current_alias = $site->GetCurrentAlias($alias_row['site_id']);
$property = array();
$property['count'] = 10;
$external_propertys = array();
// Передадим текущий домен сайта в XML
$external_propertys['current_alias'] = $current_alias;
$InformationSystem = &singleton('InformationSystem');
$InformationSystem->ShowTagsCloud($InformationSystemId, $xsl_name, $property, $external_propertys);
?>
XSL приведу полностью
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- УниверсальноеОблакоТэговCumulus -->
<xsl:template match="/">
<!--Подключим библиотеку-загрузчик Flash-->
<!--Определим количество элементов для наиболее распространенной метки-->
<xsl:variable name="max_tag_count" select="(//tag/count[not(. < //tag/count)])[1] - 1"/>
<!--Зададим минимальный и максимальный размер шрифта-->
<xsl:variable name="max_size" select="28"/>
<xsl:variable name="min_size" select="8"/>
<!--Вычислим коэффициент размерности шрифта для меток с различным количеством элементов-->
<xsl:variable name="coeff_size">
<xsl:choose>
<xsl:when test="$max_tag_count > 0">
<xsl:value-of select="($max_size - $min_size) div $max_tag_count"/>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!--Создадим контейнер для Flash-облака. ОБРАТИТЕ ВНИМАНИЕ! Если на странице несколько облаков, то id у их контейнеров должен быть разным!-->
<div id="smallcloudflashcontent">
<!--Выведем сюда классическое облако тегов, для тех у кого отключен Flash или Javascript-->
<div class="TagsCloud">
<xsl:apply-templates select="//tags/tag">
<xsl:with-param name="min_size" select="$min_size"/>
<xsl:with-param name="total" select="sum(//tag/count)"/>
<xsl:with-param name="coeff_size" select="$coeff_size"/>
</xsl:apply-templates>
</div>
</div>
<!--Подключим Flash-облако с помощью библиотеки SWFObject-->
<script>
Прошу прощения, код XSL указал не тот. Экспериментировал с отключением скрипта.
Реальный код XSL
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- УниверсальноеОблакоТэговCumulus -->
<xsl:template match="/">
<!--Подключим библиотеку-загрузчик Flash-->
<!--Определим количество элементов для наиболее распространенной метки-->
<xsl:variable name="max_tag_count" select="(//tag/count[not(. < //tag/count)])[1] - 1"/>
<!--Зададим минимальный и максимальный размер шрифта-->
<xsl:variable name="max_size" select="28"/>
<xsl:variable name="min_size" select="8"/>
<!--Вычислим коэффициент размерности шрифта для меток с различным количеством элементов-->
<xsl:variable name="coeff_size">
<xsl:choose>
<xsl:when test="$max_tag_count > 0">
<xsl:value-of select="($max_size - $min_size) div $max_tag_count"/>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!--Создадим контейнер для Flash-облака. ОБРАТИТЕ ВНИМАНИЕ! Если на странице несколько облаков, то id у их контейнеров должен быть разным!-->
<script type="text/javascript" src="/cumulus/swfobject.js"></script>
<div id="smallcloudflashcontent">
<!--Выведем сюда классическое облако тегов, для тех у кого отключен Flash или Javascript-->
<div class="TagsCloud">
<xsl:apply-templates select="//tags/tag">
<xsl:with-param name="min_size" select="$min_size"/>
<xsl:with-param name="total" select="sum(//tag/count)"/>
<xsl:with-param name="coeff_size" select="$coeff_size"/>
</xsl:apply-templates>
</div>
</div>
<!--Подключим Flash-облако с помощью библиотеки SWFObject-->
<xsl:text disable-output-escaping="yes">
<![CDATA[</tags>');
var so = new SWFObject("/cumulus/tagcloud.swf", "tagcloud", "190", 190", "7", "#ffffff");
// uncomment next line to enable transparency
so.addParam("wmode", "transparent");
so.addVariable("tcolor", "0x333333");
so.addVariable("mode", "tags");
so.addVariable("distr", "true");
so.addVariable("tspeed", "100");
so.addVariable("tagcloud", "tags_list");
// в следующей строке параметром является ID div-контейнера, созданного выше.
so.write("smallcloudflashcontent");
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
</xsl:template>
<!-- Облако из групп -->
<xsl:template match="tag">
<xsl:param name="min_size"/>
<xsl:param name="total"/>
<xsl:param name="coeff_size" select="10"/>
<!-- Нужный размер шрифта вычисляется по формуле $min_size + количество * $coeff_size -->
<xsl:variable name="size" select="round($min_size + ((count - 1) * $coeff_size))"/>
<a href="http://{//current_alias}{parent::*/parent::*/path}{parent::*/parent::*/url}tag/{tag_path_name}/" style="font-size: {$size}pt">
<xsl:value-of select="tag_name"/>
</a>
<xsl:text disable-output-escaping="yes"> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Не стыдно что-либо не знать или не понимать. Стыдно бояться спросить.
sivruk, то что указанный XSL отображает вам обычное облако тегов - это правильно. Он специально так устроен, чтобы сначала сгенерировать обычное облако, которое отобразится у тех, у кого не установлен флеш, или отключен javascript.
А у вас - просто неправильный код в xsl для формирования облака.
Сравните -
это у вас:
<xsl:text disable-output-escaping="yes">
<![CDATA[</tags>');
var so = new SWFObject("/cumulus/tagcloud.swf", "tagcloud", "190", 190", "7", "#ffffff");
// uncomment next line to enable transparency
so.addParam("wmode", "transparent");
so.addVariable("tcolor", "0x333333");
so.addVariable("mode", "tags");
so.addVariable("distr", "true");
so.addVariable("tspeed", "100");
so.addVariable("tagcloud", "tags_list");
// в следующей строке параметром является ID div-контейнера, созданного выше.
so.write("smallcloudflashcontent");
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
а так должно быть (код из файла в архиве):
<!--Подключим Flash-облако с помощью библиотеки SWFObject-->
<script>
<xsl:text disable-output-escaping="yes">
<!--
<![CDATA[var tags_list = encodeURI('<tags>]]></xsl:text>
<xsl:apply-templates select="//tags/tag">
<xsl:with-param name="min_size" select="$min_size"/>
<xsl:with-param name="total" select="sum(//tag/count)"/>
<xsl:with-param name="coeff_size" select="$coeff_size"/>
</xsl:apply-templates>
<xsl:text disable-output-escaping="yes"><![CDATA[</tags>');
var so = new SWFObject("/cumulus/tagcloud.swf", "tagcloud", "190", "190", "7", "#ffffff");
// uncomment next line to enable transparency
so.addParam("wmode", "transparent");
so.addVariable("tcolor", "0x333333");
so.addVariable("mode", "tags");
so.addVariable("distr", "true");
so.addVariable("tspeed", "100");
so.addVariable("tagcloud", tags_list);
// в следующей строке параметром является ID div-контейнера, созданного выше.
so.write("smallcloudflashcontent");
]]>
-->
</xsl:text>
</script>
Тем более что все равно ни так ни так не работает.
Создается упорное впечатление, что затыкается на исполнения swfobject.js
Скачал и закинул с http://code.google.com/p/swfobject/ все равно такая же история.
Не стыдно что-либо не знать или не понимать. Стыдно бояться спросить.
<script>
<!--
var tags_list = encodeURI('<tags><a href="http://test.pskelectro.ru/news/tag/Best%20Buy/" style="font-size: 9pt">Best Buy</a> <a href="http://test.pskelectro.ru/news/tag/iTunes/" style="font-size: 9pt">iTunes</a> <a href="http://test.pskelectro.ru/news/tag/%C0%E2%F1%F2%F0%E8%FF/" style="font-size: 9pt">Австрия</a> <a href="http://test.pskelectro.ru/news/tag/%C3%E0%F0%F0%E8%20%CF%EE%F2%F2%E5%F0/" style="font-size: 9pt">Гарри Поттер</a> <a href="http://test.pskelectro.ru/news/tag/%C8%ED%EE%EF%EB%E0%ED%E5%F2%FF%ED%E8%ED/" style="font-size: 9pt">Инопланетянин</a> <a href="http://test.pskelectro.ru/news/tag/%CA%CD%C4%D0/" style="font-size: 9pt">КНДР</a> <a href="http://test.pskelectro.ru/news/tag/%CC%EE%F6%E0%F0%F2/" style="font-size: 9pt">Моцарт</a> <a href="http://test.pskelectro.ru/news/tag/%D1%EE%E2%E1%E5%E7/" style="font-size: 9pt">Совбез</a> <a href="http://test.pskelectro.ru/news/tag/%D5%E8%E6%E8%ED%E0%20%E4%FF%E4%E8%20%D2%EE%EC%E0/" style="font-size: 9pt">Хижина дяди Тома</a> <a href="http://test.pskelectro.ru/news/tag/%D5%F0%EE%ED%E8%EA%E8%20%CD%E0%F0%ED%E8%E8/" style="font-size: 9pt">Хроники Нарнии</a> <a href="http://test.pskelectro.ru/news/tag/%DD%F0%EC%E8%F2%E0%E6/" style="font-size: 9pt">Эрмитаж</a> </tags>');
var so = new SWFObject("/cumulus/tagcloud.swf", "tagcloud", "190", "190", "7", "#ffffff");
// uncomment next line to enable transparency
so.addParam("wmode", "transparent");
so.addVariable("tcolor", "0x333333");
so.addVariable("mode", "tags");
so.addVariable("distr", "true");
so.addVariable("tspeed", "100");
so.addVariable("tagcloud", tags_list);
// в следующей строке параметром является ID div-контейнера, созданного выше.
so.write("smallcloudflashcontent");
-->
</script>
это пример с test.pskelectro.ru выведенный тем кодом который я выкладывал в предыдущем сообщении.
А у вас, видимо из-за того что CDATA оказывается внутри xsl:comment, она потом не вырезается из результирующего кода. И видимо из-за этого возникает ошибка.
Либо где-то в других js-файлах проблема.
Если что, стучитесь в аську с доступом, посмотрю в чем дело.