Wyświetlanie się wpisów w kanałach RSS nie jest dopracowane w sNews. Jeśli zapisałeś się sam do swojego kanału to zauważyłeś, że w kanale RSS wyświetlane są pełne treści wpisów. A na tym nie polega działanie RSS - subskrybenci RSS nie mieliby po co wchodzić na naszą stronę.
W RSS powinien być fragment wpisu oraz link do niego, aby zaciekawić czytelnika i skierować go na stronę.
Aby poprawić funkcję wyświetlania wpisów w RSS należy zmodyfikować snews.php. Autorem poprawki jest Matt Jones. Przed zmianami należy oczywiście zrobić kopię zapasową snews.php. Szukamy w takim razie w snews.php:
// PREPARING ARTICLE FOR XML
function strip($text) {
$search = array('/\[include\](.*?)\[\/include\]/', '/\[func\](.*?)\[\/func\]/', '/\[break\]/', '/</', '/>/');
$replace = array('', '', '', '<', '>');
$output = preg_replace($search, $replace, $text);
$output = stripslashes(strip_tags($output, '<a><img><h1><h2><h3><h4><h5><ul><li><ol><p><hr><br><b><i><strong><em><blockquote>'));
Tuż pod tym fragmentem dodajemy kod:
if (strlen($output) > 400) {
$output = substr($output,0,400);
$pos = strrpos($output, ". ");
if ($pos !== false && $pos > 300) { // w tym wierszu ucinamy wpis w kanale RSS
$output = substr($output,0,$pos).'.';
} else {
$output = $output.'...';
}
}
Całość funkcji powinna wyglądać następująco:
// PREPARING ARTICLE FOR XML
function strip($text) {
$search = array('/\[include](.*?)\[\/include\]/', '/\[func\](.*?)\[\/func\]/', '/\[break\]/', '/</', '/>/');
$replace = array('', '', '', '<', '>');
$output = preg_replace($search, $replace, $text);
$output = stripslashes(strip_tags($output, '<a><img><h1><h2><h3><h4><h5><ul><li><ol><p><hr><br><b><i><strong><em><blockquote>'));
if (strlen($output) > 400) {
$output = substr($output,0,400);
$pos = strrpos($output, ". ");
if ($pos !== false && $pos > 300) {
$output = substr($output,0,$pos).'.';
} else {
$output = $output.'...';
}
}
return $output;
}
Jeśli chcemy zwiększyć liczbę wyświetlanych znaków w RSSie to zwiększamy zaznaczone liczby o taką samą wartość. Przykładowo kolejno 500, 500, 400.
Można również zmienić wygląd fragmentu wpisu w RSS, aby nie był sformatowany, oraz żeby nie wyświetlały się w nim obrazki. Fragment będzie wówczas blokiem tekstu. Wystarczy zamienić w powyższym kodzie tę linijkę:
$output = stripslashes(strip_tags($output, '<a><img><h1><h2><h3><h4><h5><ul><li><ol><p><hr><br><b><i><strong><em><blockquote>'));
na następującą:
$output = stripslashes(strip_tags($output));
Missing.... :D
Chyba brakuje ci takiego wpisu w treści:
[code]
$search = array('/\[include\](.*?)\[\/include\]/', '/\[func\](.*?)\[\/func\]/', '/\[break\]/', '//');
[/code]
Tak, faktycznie. Generalnie miałem to wpisane we wpisie, ale zapomniałem o znaku "\". sNews go nie przetwarza, stąd nie był widoczny kawałek kodu. Zapomniałem go przerobić na encję.