Почему не передается параметр в код?

Приветствую.

Пишу снимет с параметром из вызова, но параметр кодом не перехватывается, в чем проблема может быть?

вызов [!parseimg?&pageurl=`[+pagetitle+]`!]

код:
$add = parse_url($pageurl);
print_r($add[scheme]);
print_r('://');
print_r($add[host]);

и ничего не выводится

если вместо pageurl указать адрес страницы ht tp://yandex.ru то все работает
если написать echo $pageurl то выводится то, что в [+pagetitle+]

Спасибо!

11 комментариев

avatar
так вызов где делаете внутри сниппета, типа Доклистера или где?
[!parseimg?&pageurl=`[+pagetitle+]`!]
Может надо [+pagetitle+] заменить на [*pagetitle*]?
avatar
да, вызов в doclister
там именно ++, в сниппет параметр передается, но в функцию не передается
avatar
Если вызываете сниппет в чанке доклистера, попробуйте кэшированный вызов сниппета [[parseimg? &pageurl=`[+pagetitle+]`]]
Комментарий отредактирован 2019-08-08 10:54:34 пользователем Grinyaha
avatar
И еще момент. Если вы вызываете сниппет с функцией через чанк доклистер, то у вас должно все сломаться нафиг) функцию надо объявлять один раз на странице. А у вас если доклистер выдает 10 чанков то и 10 раз будет объявляться функция. лучше это все сделать в доклистере через prepare. Почитайте про этот параметр и не мучайтесь.
Комментарий отредактирован 2019-08-08 10:57:49 пользователем Grinyaha
avatar
Вот так работать не может в принципе ибо сначала парситься [++]

[[DocLister? &tpl=`@CODE: [[snip? ¶ms=`[+pagetitle+]`]]`


используйте или чанк как шаблон или свой снипет перенесите в prepare
avatar
подскажите, что я делаю неверно?

вызов doclister:
[!DocLister?
&prepare=`parseimage`
&parents=`[*id*]` 
&tpl=`@CODE
<div class="item">
	<a href="[+pagetitle+]"><img src="[+tv.price+]" class="img_preview"/></a>
	<div class="name">Фотограф: <b>[+longtitle+]</b></div>
	<div class="link"><a href="[+pagetitle+]">[+pagetitle+]</a></div>
	[+previewimage+]
</div>`
&tvList=`price,author`
&userFields=`tv.author`
&extender=`user`
!]


parseimage
<?php
$pagetitle = (int)$FormLister->getField('pagetitle');
$add = parse_url($pagetitle);
$http = $add[scheme];
$host = $add[host];

$data = file_get_contents($pagetitle);
$images = array();
preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $data, $media);
unset($data);
$data = preg_replace('/(img|src)("|\'|="|=\')(.*)/i', "$3", $media[0]);
 
foreach ($data as $url) {
    $info = pathinfo($url);
    if (isset($info['extension'])) {
        if (($info['extension'] == 'jpg') ||
                ($info['extension'] == 'jpeg') ||
                ($info['extension'] == 'gif') ||
                ($info['extension'] == 'png'))
            array_push($images, $url);
    }
}

$foto = $images[1];
$previewimage = $http.$host.$foto
$FormLister->setPlaceholder('previewimage', $previewimage);


суть — в pagetitle вложенного документа указана ссылка на страницу, нужно с этой страницы взять вторую картинку и вывести на нее ссылку

Спасибо заранее
avatar
нуу както не понятно, вызывете DocLister а в снипете $FormLister->getField
avatar
согласен, налажал

а как в doclister так сделать? что-то не пойму где в документации найти просто замена formlister на DocLister ничего не дала

так тоже неправильно
<?php
$add = parse_url($pagetitle);
$http = $add[scheme];
$host = $add[host];

$data = file_get_contents($pagetitle);
$images = array();
preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $data, $media);
unset($data);
$data = preg_replace('/(img|src)("|\'|="|=\')(.*)/i', "$3", $media[0]);
 
foreach ($data as $url) {
    $info = pathinfo($url);
    if (isset($info['extension'])) {
        if (($info['extension'] == 'jpg') ||
                ($info['extension'] == 'jpeg') ||
                ($info['extension'] == 'gif') ||
                ($info['extension'] == 'png'))
            array_push($images, $url);
    }
}

$foto = $images[1];
$previewimage = $http.$host.$foto
$modx->setPlaceholder('previewimage', $previewimage);

avatar
Вы все в кучу смешали.

Во-первых, вы переопределяете $data. А это как раз-таки массив параметров, которыей передается в функцию prepare, оно содержит как раз переданные в чанк поля. И возвращать нужно как раз-таки $data.

То есть вам нужно сделать
$pagetitle=$data['pagetitle'];


А чтобы в вашем чанке появилось требуемое значение в [+previewimage+], вам нужно сделать так:

$data['previewimage'] = //ваше вычисленное значение;
// .......
return $data;//обязательно должно быть в конце сниппета

Комментарий отредактирован 2019-08-09 18:10:43 пользователем Dreamer
avatar
спасибо тебе, мил человек!
все заработало
avatar
:)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.