Перейти к содержимому


Улучшаем RSS новости, особенно для тех, кто установил ЧПУ


  • Вы не можете ответить в тему
Сообщений в теме: 6

#1 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 05 October 2011 - 07:17 PM

Для работы ленты rss в более корректной форме и особенно, кто поставил Модуль ЧПУ
необходимо внести правки в файле rss.php в директории includes/prosessor.
Сначала на всякий случай делаем копию своего файла rss.php
Дальше меняем весь код в файле на следующий:

#####################################
# ShopCMS: Скрипт интернет-магазина
# Copyright (c) by ADGroup
# http://shopcms.ru
#####################################

Header("Content-Type: text/xml");

echo "\n\n";
echo "\n\n";
echo "\n";
echo "".CONF_SHOP_NAME."\n";
echo "".CONF_FULL_SHOP_URL."\n";
echo "".CONF_HOMEPAGE_META_DESCRIPTION."\n";
echo "ShopCMS\n";
echo "Copyright (c) ".CONF_SHOP_NAME."\n";
echo "ru\n";
echo "".date("r")."\n\n";
$result = db_query("select NID, title, textToPrePublication, add_stamp as formatted, uri FROM ".NEWS_TABLE." WHERE add_stamp<=NOW() ORDER BY NID DESC LIMIT ".CONF_NEWS_COUNT_IN_CUSTOMER_PART);
while ( list($NID, $title, $textToPrePublication, $formatted, $uri) = db_fetch_row($result)) {
$s_data = date("r", $formatted);
if ($uri) {
$uri_rss = FU_NEWS_ROOT."/".$uri;
} else {
$uri_rss = "show_news_{$NID}.html";
}
echo "\n";
echo "".$title."\n";
if (CONF_MOD_REWRITE) {
echo "".CONF_FULL_SHOP_URL."".$uri_rss."\n";
} else {
echo "".CONF_FULL_SHOP_URL."index.php?fullnews=".$NID."\n";
}
echo "".strip_tags($textToPrePublication)."

]]>
\n";
echo "".$s_data."\n";
if (CONF_MOD_REWRITE) {
echo "".CONF_FULL_SHOP_URL."".$uri_rss."\n";
} else {
echo "".CONF_FULL_SHOP_URL."index.php?fullnews=".$NID."\n";
}
echo "
\n\n";
}
echo "
\n";
echo "
";
?>
Меняем в head.tpl.html из папки шаблонов


на более приличный вид


в .htaccess добавляем

RewriteRule ^rss\.xml$ index.php?do=rss [L]
Кто запускал магазин со старой ссылкой и он уже проиндексирован, то в .htaccess добавляем переадресацию 301:


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !rss\.xml$
RewriteRule ^index.php?do=rss$ rss\.xml [L,R=301]
Теперь лента стала намного лучше. Можно, конечно её навернуть, добавить картику ленты, категории (если есть), но это уже легко, делается, посмотрев спецификацию стандарта для RSS

Для яндекса (там требуется полный текст статьи/новости) выложу чуть позже тут же, как только сделаю себе.

В отображение текста добавлена функция strip_tags(), кто хочет в описании, чтобы теги оставались, обвертку из этой функции уберите.
  • 1

#2 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 09 October 2011 - 09:10 PM

ruter, что-то при замене оригинального кода rss.php на твой, новости в ленте не выводяться! Модуль ЧПУ не использую.
  • 0

#3 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 10 October 2011 - 10:44 AM

ruter, что-то при замене оригинального кода rss.php на твой, новости в ленте не выводяться! Модуль ЧПУ не использую.


тогда надо убрать из запроса к БД $uri
и условия проверки ЧПУ.
Замените файл rss.php этот - этот у кого нет ЧПУ:

#####################################
# ShopCMS: Скрипт интернет-магазина
# Copyright (c) by ADGroup
# http://shopcms.ru
#####################################

Header("Content-Type: text/xml");

echo "\n\n";
echo "\n\n";
echo "\n";
echo "".CONF_SHOP_NAME."\n";
echo "".CONF_FULL_SHOP_URL."\n";
echo "".CONF_HOMEPAGE_META_DESCRIPTION."\n";
echo "ShopCMS\n";
echo "Copyright (c) ".CONF_SHOP_NAME."\n";
echo "ru\n";
echo "".date("r")."\n\n";
$result = db_query("select NID, title, textToPrePublication, add_stamp as formatted FROM ".NEWS_TABLE." WHERE add_stamp<=NOW() ORDER BY NID DESC LIMIT ".CONF_NEWS_COUNT_IN_CUSTOMER_PART);
while ( list($NID, $title, $textToPrePublication, $formatted) = db_fetch_row($result)) {
$s_data = date("r", $formatted);
echo "\n";
echo "".$title."\n";
if (CONF_MOD_REWRITE) {
echo "".CONF_FULL_SHOP_URL."show_news_".$NID.".html\n";
} else {
echo "".CONF_FULL_SHOP_URL."index.php?fullnews=".$NID."\n";
}
echo "".strip_tags($textToPrePublication)."

]]>
\n";
echo "".$s_data."\n";
if (CONF_MOD_REWRITE) {
echo "".CONF_FULL_SHOP_URL."show_news_".$NID.".html\n";
} else {
echo "".CONF_FULL_SHOP_URL."index.php?fullnews=".$NID."\n";
}
echo "
\n\n";
}
echo "
\n";
echo "
";
?>

  • 0

#4 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 10 October 2011 - 11:15 AM

ruter, вот теперь все нормально, я тоже думал что нужно было убрать запрос и условие с uri, но некогда было проверить.
  • 0

#5 Istock3d

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 121 сообщений
Репутация: 1
Начинающий

Отправлено 10 October 2011 - 02:02 PM

Что-то я вообще не могу найти у себя в магазине RCC-ленты, где она?
  • 0

#6 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 10 October 2011 - 02:15 PM

Istock3d, находиться по адресу /index.php?do=rss, какая логика в этом заложена авторами вообще непонятно.
  • 0

#7 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 11 October 2011 - 04:04 PM

Единственное я нашел, что в файле index.php создан массив который вызывается при получении параметра $_GET["do"] при этом идет проверка существования массива имен файлов в нем содержащихся ( среди которых есть rss) при наличии параметра do проверяется массив на наличие в нем значения например rss (отсюда do=rss) и если истина, то инклудится соответсвующий файл из директории includes/processor/.

Сюдя по этому механизму - это сделано, чтобы постоянно не включать все файлы находящиеся в этой директории, а только тот который вызван.
Другого объяснения я пока не вижу.
  • 0