Page 1 of 1

UDT probleem.

Posted: Mon Jan 16, 2017 9:18 pm
by Rinker
In navolging van mijn vorige probleem heb ik nu een probleem met een UDT.
Deze udt roep ik in mijn template aan met:

Code: Select all

{gallery_album album_name="{image->gallery_url}"}
Mijn (test) udt is:

Code: Select all

if ( isset($params['album_name']) ) {

echo $params['album_name']."<br>"; //test de url

$re = '/(?:\?|\&)(?<key>[\w-]+)(?:\=?|)(?<value>[\w.]+)?/';
$str = $params['album_name'];
$count = preg_match_all($re, $str, $matches,  PREG_SET_ORDER);
echo "matches found = " . $count . "<br>";
var_dump($matches);

foreach ($matches as $val) {
    echo "matched: " . $val[0] . "<br>";
    echo "(1)    key: " . $val['key'] ."<br>";
    echo "(2) Value: " . $val['value'] . "<br><br>";
    }


} //end
Uitkomst:

Code: Select all

http:///www.mijnsite.nl/index.php?mact=Gallery,mdcd5d,default,1&mdcd5ddir=Fotografie%2F&mdcd5dreturnid=1&page=1
matches found = 4
array (size=4)
  0 => 
    array (size=5)
      0 => string '?mact=Gallery' (length=13)
      'key' => string 'mact' (length=4)
      1 => string 'mact' (length=4)
      'value' => string 'Gallery' (length=7)
      2 => string 'Gallery' (length=7)
  1 => 
    array (size=3)
      0 => string '&amp' (length=4)
      'key' => string 'amp' (length=3)
      1 => string 'amp' (length=3)
  2 => 
    array (size=3)
      0 => string '&amp' (length=4)
      'key' => string 'amp' (length=3)
      1 => string 'amp' (length=3)
  3 => 
    array (size=3)
      0 => string '&amp' (length=4)
      'key' => string 'amp' (length=3)
      1 => string 'amp' (length=3)

matched: ?mact=Gallery
(1) key: mact
(2) Value: Gallery

matched: &
(1) key: amp
(2) Value: 

matched: &
enz.... ook notices vanwege geen 'value'key....
Niet goed dus, de url wordt goed doorgegeven maar de uitkomst is niet correct.
Als ik nu het volgende veranderd werkt het perfect:

Code: Select all

$str = 'http:///www.mijnsite.nl/index.php?mact=Gallery,mdcd5d,default,1&mdcd5ddir=Fotografie%2F&mdcd5dreturnid=1&page=1';
Uitkomst:

Code: Select all

http:///www.mijnsite.nl/index.php?mact=Gallery,mdcd5d,default,1&mdcd5ddir=Fotografie%2F&mdcd5dreturnid=1&page=1
matches found = 4

array (size=4)
  0 => 
    array (size=5)
      0 => string '?mact=Gallery' (length=13)
      'key' => string 'mact' (length=4)
      1 => string 'mact' (length=4)
      'value' => string 'Gallery' (length=7)
      2 => string 'Gallery' (length=7)
  1 => 
    array (size=5)
      0 => string '&mdcd5ddir=Fotografie' (length=21)
      'key' => string 'mdcd5ddir' (length=9)
      1 => string 'mdcd5ddir' (length=9)
      'value' => string 'Fotografie' (length=10)
      2 => string 'Fotografie' (length=10)
  2 => 
    array (size=5)
      0 => string '&mdcd5dreturnid=1' (length=17)
      'key' => string 'mdcd5dreturnid' (length=14)
      1 => string 'mdcd5dreturnid' (length=14)
      'value' => string '1' (length=1)
      2 => string '1' (length=1)
  3 => 
    array (size=5)
      0 => string '&page=1' (length=7)
      'key' => string 'page' (length=4)
      1 => string 'page' (length=4)
      'value' => string '1' (length=1)
      2 => string '1' (length=1)

matched: ?mact=Gallery
(1) key: mact
(2) Value: Gallery

matched: &mdcd5ddir=Fotografie
(1) key: mdcd5ddir
(2) Value: Fotografie

matched: &mdcd5dreturnid=1
(1) key: mdcd5dreturnid
(2) Value: 1

matched: &page=1
(1) key: page
(2) Value: 1
Dit is zoals het moet zijn!
Alleen de url is steeds verschillend dus die moet worden doorgegeven zoals in eerste voorbeeld maar dan werkt het niet?
Ook als ik de 'params['album_name']' direct in preg_match zet werkt het ook niet.

Doe ik nu iets stoms of zie ik wat over het hoofd??
Iemand enig idee?

bvd.

Re: UDT probleem.

Posted: Mon Jan 16, 2017 9:33 pm
by Rolf
{gallery_album album_name="{image->gallery_url}"}
Uhm, dit kan niet. Klopt deze code met jouw site of zit er hier op het forum in typo in...

Re: UDT probleem.

Posted: Tue Jan 17, 2017 2:00 pm
by deactivated010521
Je hebt drie slashes "http:///' in het protocol van je url staan. In plaats van Regular Expressions kan je beter de "parse_*" PHP functies gebruiken. Zijn veel makkelijker te lezen en te begrijpen:

Code: Select all


$url = "http://example.com?mact=MyModule,id,action&page=1&title=Groovy";

// http://php.net/manual/en/function.parse-url.php
$query = parse_url($url, PHP_URL_QUERY);
print "$query \n";

// http://php.net/manual/en/function.parse-str.php
parse_str($query, $queryList);
print_r($queryList)

// $smarty->assign('querryList', $queryList);

Re: UDT probleem.

Posted: Tue Jan 17, 2017 4:04 pm
by Rinker
@Rolf:
Zit inderdaad een typo in, moet zijn '$image->gallery_url' :)

@ arnoud:
Drie slashes is ook een typo, maar moet niet uitmaken voor de preg_match_all functie.

Ik zal eens kijken naar die parse functies, lijkt erop dat ik het daar ook mee red, bedankt.

Rest mij nog wel de vraag waarom het niet werkt, dat zou ik toch wel graag willen weten.
Als ik de string in de udt zelf zet werkt het perfect maar als ik hem doorgeef als parameter werkt het niet terwijl hij wel netjes wordt geprint???

Re: UDT probleem.

Posted: Tue Jan 17, 2017 5:43 pm
by Rinker
Ben net nog wat aan het testen geweest en betreft het ( volgens mij ) een scope probleem.

Als ik in het template de gallery_url eerst aan een eigen variable toekent dan gaat het wel goed, bv.:

Code: Select all

{$album_url = $image->gallery_url}
{gallery_album album_name=$album_url}
Dit werkt perfect, dus opgelost! ;D
Nog bedankt voor het meedenken.

Re: UDT probleem.

Posted: Wed Jan 18, 2017 1:07 pm
by Rinker
Sorry heren, de oplossing die ik dacht te hebben werkt ook niet.
Ik haalde twee udt's door elkaar..... ::)

Zal toch die php parse functies moeten gebruiken.

Mocht er nog iemand ideeën hebben zijn ze altijd welkom, ik wil toch graag weten waarom dit niet werkt, mocht ik er zelf nog achter komen dan laat ik dat ook weten natuurlijk, dit euvel laat me niet los :D