Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [cakePHP] Router::url che fa le bizze...

    Giuro che non capisco che gli prende e non gli trovo una spiegazione logica...

    Codice PHP:
    $content_page '... [url="<router>/img/catalogs/hotpoint_ariston.png</router>"]<img>[/url] ...';
    $regex '#<router>(.*)</router>#';
    preg_match_all($regex$content_page$find);
    foreach(
    $find As $id => $value) {
         
    pr($find[0][0]);
         
    pr(Router::url((string)$find[0][0])); //Anche senza cast non funziona
         
    pr(Router::url('/img/catalogs/hotpoint_ariston.png'));

    ed ecco i risultati

    codice:
    /img/catalogs/hotpoint_ariston.png
    /negozio/pages//img/catalogs/hotpoint_ariston.png
    /negozio/img/catalogs/hotpoint_ariston.png
    Ovviamente è l'ultima stringa quella corretta...

    Non mi spiego la cosa... :|

    Grazie anticipatamente per chi dedicherà un pò del suo tempo a trovare almeno il problema, non dico la soluzione

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    1. quello che cerchi non e' in $find[0][0], ma in $find[1]
    2. usa il modifier un-greedy, o l'espressione con (.*?) altrimenti l'espressione troverà cose che non ti aspetti quando ci sono piu' coppie di <router></router>
    3. credo che tu stia facendo qualcosa di terribilmente sbagliato, questo parsing non serve, cake ha le apposite funzioni per creare le url in base alle route configurate: basta usare una cosa tipo $html->url(array("controller" => "negozio","action" => "showproduct", $id));. E le immagini invece le devi tenere sotto la webroot/qualcosa, senza nessuna route.

  3. #3
    1. Il codice è solo una parte, lo [0][0] è perché ci sono più ricorenze e non l'ho corretto...
    2. Per il un-greedy mi sono accorto della cosa e l'ho cambiata come hai consigliato tu...
    3. Il contenuto di $content_page è recuperato da una query dove ho del codice html da stampare a video, quindi non volendo usare eval() all'interno dell'action ho optato per dei tag adhoc...

    Il problema di fondo è che il Router::url() con il valore diretto dalla regex non funziona, mentre se glielo forzo io si...

  4. #4
    Ecco la soluzione che ho trovato:

    Codice PHP:
    ...
    function 
    _parseRegEx($url) {
        return 
    Router::url((string)$url[1]);
    }
    ...
    $content_page preg_replace_callback($regex, array(&$this'_parseRegEx'), $content_page);
    ... 
    Quando avrò un pò di tempo da perdere cercherò di capire il perché non voglia funzionare direttamente con preg_replace...


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.