Как добавить параметр url в сниппет-парсер?

Lexx59

Профессор
Регистрация
9 Янв 2009
Сообщения
183
Реакции
38
Есть сниппет-парсер:
[[parseRSS]]
Код:
<?php
/********************************************************** 
 * Parse XML data into an array structure                 * 
 * Usage: array parse_rss ( string data )                 * 
 **********************************************************/ 
function parse_rss($reg_exp, $xml_data) { 
    preg_match_all($reg_exp, $xml_data, $temp); 
    return array( 
        'count'=>count($temp[0]), 
        'title'=>$temp[1], 
        'link'=>$temp[2], 
        'desc'=>$temp[3], 
        'pubdate'=>$temp[4]   //добавлено 
    ); 
} 
/********************************************************** 
 * Parse Array data into an HTML structure                * 
 * Usage: string parse_rss ( array data )                 * 
 **********************************************************/ 
function output_rss($pattern, $rss_data) { 
    $temp = ""; 
    for($i=0; $i<$rss_data['count']; $i++) { 
        $temp .= sprintf($pattern, 
            $rss_data['link'][$i], 
            html_entity_decode($rss_data['title'][$i]), 
            html_entity_decode($rss_data['desc'][$i]), 
            $rss_data['pubdate'][$i]   //добавлено 
        ); 
    } 
    return $temp; 
} 
/********************************************************** 
 * Settings                                               * 
 **********************************************************/ 
[SIZE="5"][COLOR="SeaGreen"][B]$url = 'http://rss.org/catalog.php?ID=CZduXYymiAJ';[/B][/COLOR][/SIZE]
$reg_exp  = '#<item>.*?<title>(.*?)<\/title>.*?'; 
$reg_exp .='<link>(.*?)<\/link>.*?<description>'; 
$reg_exp .='(.*?)<\/description>.*?<pubDate>'; //исправлено 
$reg_exp .= '(.*?)<\/pubDate>.*?<\/item>#si';  //добавлено 
$pattern = '<a href="%s">%s</a><br>Date: %s<hr>'; 
/********************************************************** 
 * Main script                                            * 
 **********************************************************/ 
if ( $xml_data = file_get_contents($url) ) { 
    $rss_data = parse_rss($reg_exp, $xml_data); 
    echo output_rss($pattern, $rss_data); 
} 
/********************************************************** 
  * The END                                                * 
 **********************************************************/
?>
У него внутри есть параметр - $url - выделен зеленым.
Как переделать снипет так, чтобы url можно было задавать параметром при вызове сниппета?
Типа [[parseRSS?URL=`http://rss.org/catalog.php?ID=CZduXYymiAJ`]]
Пытался разобраться как передаются параметры в WayFinder - но слишком сложно для меня на текущий момент :(
 
Это делается очень просто:
сначала определяем переменную в сниппете:
PHP:
if(isset($url)) $url = $url; else $url='';
А потом уже используем переменную.

Перевод, примерно, следующий:
PHP:
if(isset($url)) //Если сниппет вызывается с определенным параметром url, то
$url = $url; // передаем этот параметр переменной, в противном случае
else $url=''; // назначаем переменной значение по умолчанию, в этом случае у нас в переменной ничего нет, но мы могли бы написать $url='http://rss.org/catalog.php?ID=CZduXYymiAJ' и тогда, если в сниппете не задан url, то парсер будет обрабатывать ссылку по умолчанию, т.е. http://rss.org/catalog.php?ID=CZduXYymiAJ
Соответственно, вызывать сниппет
PHP:
[[parseRSS? &url=`http://rss.org/catalog.php?ID=CZduXYymiAJ`]]
для кэшированного или
PHP:
[!parseRSS? &url=`http://rss.org/catalog.php?ID=CZduXYymiAJ`!]
для некэшированного
 
При адресе вида:

все работает отлично.

А, когда подставляю такой адрес:

то модх вылетает:

« MODx Parse Error »
MODx encountered the following error while attempting to parse the requested resource:
« PHP Parse Error »

PHP error debug
Error: file_get_contents(Для просмотра ссылки Войди или Зарегистрируйся) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
Error type/ Nr.: Warning - 2
File: /httpdocs/manager/includes/document.parser.class.inc.php(814) : eval()'d code
Line: 54

Parser timing
MySQL: 0.0063 s (3 Requests)
PHP: 0.1287 s
Total: 0.1350 s

ощущение, что проблема в параметрах самого адреса - наличие знака вопроса. не знаю как поправить.
 
как говорится: решение у вас не получилось... Предлагаю своё. Надеюсь не через Ж :-]
Насколько я понял, речь идёт об MODx Evolution...
Устанавливаем экстра pieX Ver0.6.1
Смотрим сюда
и понимаем, что наш вызов будет выглядеть вот так:
HTML:
[!pieX? &url=`feedURL`!]
а если со знаками, то их мы заменяем по правилу:
HTML:
"?" => |xq|
"=" => |xe|
"&" => |xa|
Погнале
HTML:
УРЛ=http://r1.rssmix.org/catalog.php?ID=CZduXYymiAJKG87lNrOi_2gcrVkfCi-PN3CPWAUoS3E7OoXmJdolja46x7DSHVXaP5yqdBfUTbcfsT9yl urowQ
Будет
HTML:
http://r1.rssmix.org/catalog.php|xq|ID|xe|CZduXYymiAJKG87lNrOi_2gcrVkfCi-PN3CPWAUoS3E7OoXmJdolja46x7DSHVXaP5yqdBfUTbcfsT9yl urowQ
Вызов сниппета
HTML:
[!pieX? &url=`http://r1.rssmix.org/catalog.php|xq|ID|xe|CZduXYymiAJKG87lNrOi_2gcrVkfCi-PN3CPWAUoS3E7OoXmJdolja46x7DSHVXaP5yqdBfUTbcfsT9yl urowQ`!]
 
там все на китайском :)

вот это:
Код:
"?" => |xq|
"=" => |xe|
"&" => |xa|
только при установленном PieX работает? Или можно без него заменять?
 
Я не могу сказать "С" или "БЕЗ", пока сам не попробовал. Пробуй - и нам расскажи. Это как для спецсимвола "[" =&#91, работает, но не везде...
 
modx все-равно вылетает
Код:
PHP error debug
  Error: 	
file_get_contents(http://r1.rssmix.org/catalog.php|xq|ID|xe|CZduXYymiAJKG87lNrOi_2gcrVkfCi-PN3CPWAUoS3E7OoXmJdolja46x7DSHVXaP5yqdBfUTbcfsT9ylurowQ)
[function.file-get-contents]: 
failed to open stream: 
HTTP request failed! HTTP/1.1 403 Forbidden

Хотя если url задавать явно внутри сниппета:

Код:
$url = 'http://r1.rssmix.org/catalog.php[B]?[/B]ID=CZduXYymiAJKG87lNrOi_2gcrVkfCi-PN3CPWAUoS3E7OoXmJdolja46x7DSHVXaP5yqdBfUTbcfsT9ylurowQ';

то все работает.

Когда url задается в качестве параметра, то
Код:
echo $url;
выдает

Куда-то пропадают знак вопроса перед ID, а после ID знак равенства и все что после него.
 
Если значения не часто подставлять то наверняка поможен Для просмотра ссылки Войди или Зарегистрируйся

Код:
http%3A%2F%2Fr1.rssmix.org%2Fcatalog.php%3FID%3DCZduXYymiAJKG87lNrOi_2gcrVkfCi-PN3CPWAUoS3E7OoXmJdolja46x7DSHVXaP5yqdBfUTbcfsT9ylurowQ
 
Назад
Сверху