Foren / National / Russian / Модули и плагины / Проблема со временем в RSS

staleo
#1 21. Februar 2012, 13:58

Здравствуйте,

Никак не могу победить время, которое плагин RSS выводит тегом {RSS_ROW_DATE}. Сейчас выводится вот что: <pubDate>Tue, 21 Feb 2012 09:01:00 +0000</pubDate>, хотя в datas/config.php проставлено date_default_timezone_set('Europe/Moscow');, то есть вывод всего времени должен идти с корректировкой +0400. Он, собственно говоря, и выходит с такой корректировкой, например, в страницах, а в RSS — никак.

Как тут поступить, не подскажете?

Добавлено 19 часов спустя:

Неужели нет решения?

Ну откуда-то эти +0000 все же берутся же!


Dieser Beitrag wurde von staleo (am 26. Februar 2012, 22:19, vor 12 Jahre) bearbeitet
Dayver
#2 22. Februar 2012, 14:16

Наверное потому что в страницах дату генерит котовская функция 

... 
'DATE' => cot_date($date_format, $page_data['page_date']),
 ...

а в RSS не так(нативная пхп-шная)

...
$items[$i]['pubDate'] = date('r', $row['page_date']);
...

Если заменить на

...
$items[$i]['pubDate'] = cot_date('r', $row['page_date']);
...

может случится щастье, а может и нет smiley

Pavlo Tkachenko aka Dayver
Trustmaster
#3 23. Februar 2012, 18:43

Проблема несколько глубже. Cotonti использует временную зону GMT по умолчанию и не позволяет её изменять, поскольку все даты в базе хранятся именно в этой зоне. Смещение добавляется уже при отображении для каждого пользователя. Всё это замечательно работает, кроме date('r'), поскольку PHP не знает о временной зоне Cotonti. Приходится фиксить это вручную. Исправление уже на гите.

May the Source be with you!
staleo
#4 23. Februar 2012, 22:50

Спасибо, заработало!

И не отходя от кассы: можно ли заставить RSS-овский .tpl подхватывать экстраполя? Мы за тикетом не постоим!

Добавлено 2 дня спустя:

В общем, всплыла еще одна большая засада.

Мне вообще этот RSS-канал нужен исключительно для Яндекс.Новостей. Был сайт на Genoa, пока переводил на Сиену, Я.Новости выключили импорт с сайта. Ну ладно, думаю, потом обратимся, они включат назад. Все прекрасно заработало, проблема с часовым поясом решена, благодаря Дайверу и Трастмастеру. Пишу в Яндекс: подключайте, мол. А они: а почитайте наши новые требования к оформлению экспортного файла. Открываю требования и вижу:

Встречающиеся в тексте символы < > & ' " необходимо заменять на соответствующие элементы:
& на &amp;
< на &lt;
> на &gt;
' на &apos;
" на &quot;
...
Пример, ссылка "http://some.host.ru/?id=1&page=10" приводится к виду "http://some.host.ru/?id=1&amp;page=10"

Я нереально офигел от такой постановки вопроса. Ранее Я.Новости уже и так не удовлетворял самый простой задокументированный и старый как мир формат RSS-фида, и они заставляли туда пихать, например, этот свой дурацкий тег <yandex:full-text>. Поисковик должен сам подстраиваться под генераторов контента? Не, не слышал. Это пусть тупые Рамблер с Гуглом импортируют новости просто потому, что такие новости пишутся. А мы, Яндекс, — монстры рунета, а монстры рунета могут и не стесняться требовать в 2012 году экспортный файл. Ну да ладно, бог с ним с этим <yandex:full-text>, в конце концов мод RSS под Genoa был небольшой и на 2 минуты.

Но сейчас! Сейчас Яндекс требует и элементы HTML-форматирования менять для экспортного файла. А у меня там, понятно, везде < /br> и все такое. И как с этим быть, я, откровенно говоря, не знаю абсолютно.

У меня пока нет никакого другого решения, кроме как, — тс-с-с, — взять и от руки написать этот rss.php со всеми нужными тегами и всей фигней. Пусть они потом подключат, позаполнять файлик два-три дня, а потом бросить к чертовой матери.

Но вдруг вы знаете, как сделать все красиво и автоматом?


Dieser Beitrag wurde von staleo (am 26. Februar 2012, 22:20, vor 12 Jahre) bearbeitet
Dayver
#5 27. Februar 2012, 06:52

Поскольку фид формируется посредством шаблона то не вижу никакой проблемы настоить его как только яндексу угодно. Если прочитать мануал по шаблонизатору http://www.cotonti.com/docs/ext/themes/cotemplate_statements то увидим раздел про Callbacks - тоесть внутри шаблона к переменной можно применить любую функцию .... ищем в мануале по пхп функцию которая делает из символов их в HTML сущности и ...... ииии все тока тс-с-с никому не расказывайте что все так просто что даже лезть в пхп файлы и что то хакать не нужно 

Добавлено вечность спустя:

Кстати еще для просветления массам полезно знать что касательно ссылок то котовская функция cot_url умеет это делать(замену спец символов в их HTML сущности) автоматом если ее вызвать с 4-тым параметров равным true

/**
* Transforms parameters into URL by following user-defined rules.
* This function can be overloaded by cot_url_custom().
*
* @param string $name Module or script name
* @param mixed $params URL parameters as array or parameter string
* @param string $tail URL postfix, e.g. anchor
* @param bool $htmlspecialchars_bypass If TRUE, will not convert & to &amp; and so on.
* @param bool $ignore_appendix If TRUE, $cot_url_appendix will be ignored for this URL
* @return string Valid HTTP URL
*/
function cot_url($name, $params = '', $tail = '', $htmlspecialchars_bypass = false, $ignore_appendix = false)
Pavlo Tkachenko aka Dayver

Dieser Beitrag wurde von Dayver (am 27. Februar 2012, 07:47, vor 12 Jahre) bearbeitet
esclkm
#6 27. Februar 2012, 16:40

из собственного опыта: я вставляю все пользовательские функции в php файл темы оформления

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
staleo
#7 27. Februar 2012, 22:02

Решил проблему так: в rss.php строку #253

'RSS_ROW_DESCRIPTION' => cot_convert_relative_urls($item['description']),

поменял на

'RSS_ROW_DESCRIPTION' => htmlspecialchars($item['description']),

htmlspecialchars — это и есть функция, которая переводит все символы, которые могут быть интерпретированы как часть синтаксиса, в HTML-коды символов. Дайверу опять спасибо. :)

Если я правильно понял, cot_convert_relative_urls конвертирует относительные урлы в абсолютные, а мне это не нужно, поэтому функцию выкинул.

Кстати, а то, что текст новости называется RSS_ROW_DESCRIPTION — это точно не ошибка? А то можно спутать со названием поля DESC для страницы.

Ну и опять к вопросу возвращусь: можно ли заставить RSS-овский .tpl подхватывать экстраполя? Дело в том, что Яндекс.Новости не хочет подсасывать картинки в тексте если они не вставлены в таком виде внутри <item>:

<enclosure url="http://www.rossiyskie-novosti.ru/2003/03/25/yandex.jpg" type="image/jpeg"/>

А это фигово.


Dieser Beitrag wurde von staleo (am 27. Februar 2012, 22:15, vor 12 Jahre) bearbeitet
Dayver
#8 27. Februar 2012, 22:47

Хаки - нехорошо (при первом же обновлении поймете), все же лучше было бы использовать колбекa в шаблоне.

А то что модуль RSS не знаком с экстраполями - уже упущение надо бы тикет забабахать

Pavlo Tkachenko aka Dayver

Dieser Beitrag wurde von Dayver (am 28. Februar 2012, 00:41, vor 12 Jahre) bearbeitet
Trustmaster
#9 28. Februar 2012, 08:04

RSS_ROW_DESCRIPTION - не ошибка, в RSS этот тег <description> называется. Вот то, что мы там по умолчанию htmlspecialchars не применяем - это ошибка.

May the Source be with you!
staleo
#10 28. Februar 2012, 19:37

RSS_ROW_DESCRIPTION - не ошибка, в RSS этот тег <description> называется.

В том-то и штука, что в <description> именно транслируется не весь текст новости, а ее лид, краткое саммари, а полный текст выводится в теге <fulltext>. А в .tpl {RSS_ROW_DESCRIPTION} выводит полный текст страницы.

Trustmaster
#11 29. Februar 2012, 06:31

В спецификации RSS нет ни единого упоминания <fulltext>. Обычно используется description + обрезка по more.

May the Source be with you!
jcrush
#12 10. April 2012, 12:07

Смотрю разговор о Я.новостях...

можно кстати жестко зону прописать в файле рсс.

SEO блог: http://blog.stfw.ru/