Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - alpotemkin

Страницы: 1 [2]
16
Шаблоны XSLT / Re:Вывод полей в RSS-ленте
« : 12 Апреля 2011, 13:41:00 »
2.3 это сильно, я начинал с 2.7? так что даже не знаю что там могло измениться за такое время, а можно ссылку на сайт глянуть его с лицевой части

Угу, сам в шоке от такой древности. И обновлять начальство отказывается под предлогом, что лучшее - враг хорошего.
Лицевая часть - это сам сайт? Тогда вот: www.elbrus.redfox.ru. Правда, что ты там хочешь увидеть?  :)

17
Шаблоны XSLT / Re:Вывод полей в RSS-ленте
« : 11 Апреля 2011, 11:55:08 »
У меня, к сожалению, версия 2.3.3.9 и обновить нет возможности. На всякий случай вот код _rss.php

<?php
abstract class __rss_data {
public $rss_per_page = 10;
public function rss() {
$element_id = getRequest('param0');
if(!umiHierarchy::getInstance()->isExists($element_id)) {
return "%data_feed_nofeed%";
}

if(!$this->checkIfFeedable($element_id)) {
return "%data_feed_wrong%";
}

$xslPath = "xsl/rss.xsl";

$this->generateFeed($element_id, $xslPath);
}


public function atom() {
$element_id = getRequest('param0');
if(!umiHierarchy::getInstance()->isExists($element_id)) {
return "%data_feed_nofeed%";
}

if(!$this->checkIfFeedable($element_id)) {
return "%data_feed_wrong%";
}

$xslPath = "xsl/atom.xsl";

$this->generateFeed($element_id, $xslPath);
}

public function rssByCustomIds($iRootId = NULL, $vFeedIds = NULL, $sXslTpl = NULL) {
if (is_null($iRootId)) { // RETURN
return $this->rss();
} else {
if (is_null($sXslTpl)) $sXslTpl = "xsl/rss.xsl";
return $this->feedByCustomIds($iRootId, $vFeedIds, $sXslTpl);
}
}
public function atomByCustomIds($iRootId = NULL, $vFeedIds = NULL, $sXslTpl = NULL) {
if (is_null($iRootId)) { // RETURN
return $this->rss();
} else {
if (is_null($sXslTpl)) $sXslTpl = "xsl/atom.xsl";
return $this->feedByCustomIds($iRootId, $vFeedIds, $sXslTpl);
}
}
public function feedByCustomIds($iRootId, $vFeedIds, $sXslPath) {
if (!umiHierarchy::getInstance()->isExists($iRootId)) { // RETURN
return "%data_feed_nofeed%";
//} elseif (!$this->checkIfFeedable($iRootId)) { // RETURN
// return "%data_feed_wrong%";
} else {
$arrFeedIds = array();
if (is_string($vFeedIds)) {
$arrFeedIds = preg_split("/[^\d]/is", $vFeedIds);
} elseif (is_numeric($vValue)) {
$arrFeedIds = array(intval($vFeedIds));
} elseif (!is_array($vFeedIds)) {
$arrFeedIds = array();
}
$arrFeedIds = array_map('intval', $arrFeedIds);
//
$result = array();
$result[] = $iRootId;
foreach ($arrFeedIds as $iNextId) {
if ($iNextId && $oNextElement = umiHierarchy::getInstance()->getElement($iNextId)) {
$iNextParent = intval($oNextElement->getRel());
if ($this->checkIfFeedable($iNextParent)) {
$result[] = $iNextId;
}
}
}
//
$t = new umiXmlExporter();
$t->setElements($result);
$t->run();
$src = $t->getResultFile();
$xmldata = DomDocument::loadXML($src);
//echo "[".($xmldata->asXML())."]";
$xslt = new xsltProcessor;
$xslt->importStyleSheet(DomDocument::load($sXslPath));
$resultXml = $xslt->transformToXML($xmldata);
//echo "[".$resultXml."]";
header("Content-type: text/xml; charset=utf-8");
$this->flush($resultXml);
}
}


public function generateFeed($element_id, $xslPath) {
$sel = new umiSelection();

$sel->setLimitFilter();
$sel->addLimit($this->rss_per_page);


$sel->setHierarchyFilter();
$sel->addHierarchyFilter($element_id);

$result = Array($element_id);
$result = array_merge($result, umiSelectionsParser::runSelection($sel));

$t = new umiXmlExporter();
$t->setElements($result);
$t->run();
$src = $t->getResultFile();

$xmldata = DomDocument::loadXML($src);

$xslt = new xsltProcessor;
$xslt->importStyleSheet(DomDocument::load($xslPath));
$resultXml = $xslt->transformToXML($xmldata);

header("Content-type: text/xml; charset=utf-8");
$this->flush($resultXml);
}


public function getRssMeta($element_id = false, $title_prefix = "") {
$element_id = $this->analyzeRequiredPath($element_id);

if(!umiHierarchy::getInstance()->isExists($element_id)) {
return "";
}

if(!$this->checkIfFeedable($element_id)) {
return "";
}

$element = umiHierarchy::getInstance()->getElement($element_id);
$element_title = $title_prefix . $element->getName();

return "<link rel=\"alternate\" type=\"application/rss+xml\" href=\"/data/rss/{$element_id}/\" title=\"{$element_title}\" />";
}


public function getRssMetaByPath($path, $title_prefix = "") {
if($element_id = umiHierarchy::getInstance()->getIdByPath($path)) {
return $this->getRssMeta($element_id, $title_prefix);
} else {
return "";
}
}


public function getAtomMeta($element_id = false, $title_prefix = "") {
$element_id = $this->analyzeRequiredPath($element_id);

if(!umiHierarchy::getInstance()->isExists($element_id)) {
return "";
}

if(!$this->checkIfFeedable($element_id)) {
return "";
}

$element = umiHierarchy::getInstance()->getElement($element_id);
$element_title = $title_prefix . $element->getName();

return "<link rel=\"alternate\" type=\"application/rss+xml\" href=\"/data/atom/{$element_id}/\" title=\"{$element_title}\" />";
}

public function getAtomMetaByPath($path, $title_prefix = "") {
if($element_id = umiHierarchy::getInstance()->getIdByPath($path)) {
return $this->getAtomMeta($element_id, $title_prefix);
} else {
return "";
}
}


public function checkIfFeedable($element_id) {
$element = umiHierarchy::getInstance()->getElement($element_id);

if(!$element) return false;

$hierarchy_type = umiHierarchyTypesCollection::getInstance()->getType($element->getTypeId());

$module = $hierarchy_type->getName();
$method = $hierarchy_type->getExt();

foreach($this->alowed_source as $allowed) {
if($module == $allowed[0] && $method == $allowed[1]) {
return true;
}
}
return false;
}
};
?>

18
Шаблоны XSLT / Re:Вывод полей в RSS-ленте
« : 07 Апреля 2011, 11:20:45 »
Ну что я могу сказать) разобраться в механизме формирования rss оказалось не такой быстрой задачей. Сегодня пообщаюсь с тех. поддержкой может они чего толкового расскажут о механизме работы rss.

Знаю только что почему то внутри rss.xsl я не могу обратиться ко всем полям объекта (новости), при попытке вывести объект мне выводяться только поля

хотя если к тому же объекту обратиться через /uobject/355, то видны все поля, как только разберусь в этом можно будеть и keyword подставлять, насчет publish_date, сложно сказать в чем проблема, так как эту проблему надо увидить, а у меня все ок выводит.

На всякий пожарный мой rss.xsl файл

В том-то и дело, что rss.xsl у меня стандартный, как у Вас. Вот и непонятно, где косяк. Может быть в _rss.php? Вроде этот файл отвечает за вывод и работу rss.

19
Шаблоны XSLT / Re:Вывод полей в RSS-ленте
« : 05 Апреля 2011, 13:07:56 »
смогу посмотреть только завтра, так как надо поставить тестовый вариант

Хорошо, буду ждать ответа. Еще раз спасибо.

20
Шаблоны XSLT / Re:Вывод полей в RSS-ленте
« : 05 Апреля 2011, 12:30:54 »
Не совсем то. Анонс мне как раз нужен. Я имею в виду, что хотел бы такой вид:

- Название
<title><xsl:value-of select="key('property', concat(@id, 'h1'))/values/value"/></title>

- Дата
<xsl:if test="key('property', concat(@id, 'publish_time'))/values/value/RFC">
<pubDate><xsl:value-of select="key('property', concat(@id, 'publish_time'))/values/value/RFC"/></pubDate>
</xsl:if>
(Почему-то не работает, как писал в теме http://umihelp.ru/forum/index.php/topic,46.0.html)

- "Keywords"
Что тут прописать?

- Описание (Анонс новости)
<xsl:choose>
<xsl:when test="key('property', concat(@id, 'anons'))/values/value != ''">
<description><xsl:value-of select="key('property', concat(@id, 'anons'))/values/value"/></description>
</xsl:when>
</xsl:choose>

В данный момент выводится только Название и Анонс. И вопрос: что прописать, чтобы выводился еще и Keywords. Что-то я не нашел ничего по этой теме.

21
Шаблоны XSLT / Вывод полей в RSS-ленте
« : 04 Апреля 2011, 19:06:03 »
Доброго времени суток!

Хотелось бы узнать, можно ли в RSS-ленте новостей выводить другие поля, помимо "Название" и "Анонс". Например "Keywords".

Заранее спасибо за ответ.

22
Шаблоны XSLT / Дата новости в RSS-ленте
« : 04 Апреля 2011, 18:58:24 »
Доброго времени суток!

Есть сайт на UMI CMS. Есть новости и с них выводится RSS-лента. Но там почему-то не выводится дата новости. Шаблон rss.xsl вроде стандартный...
Подскажите, в чем может быть проблема?

Страницы: 1 [2]