La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 3 ]

ToX

Topic: Slug dinamico senza database

avendo la necessità di avere degli url "seo friendly", ma non potendo utilizzare il database per memorizzare la relativa stringa, mi sono creato un component che mi permette di ottenerli dinamicamente:


<?php
// /app/controllers/components/slug.php
    /**
     * Component per gestire gli url Seo-friendly (Slug) in modo dinamico, senza db
     *
     * @author ToX
     * @todo Sistemare il redirect nella funzione check. Utilizza metodi amarognoli e non va bene con cake
     *         
     */

class SlugComponent extends Object {

    var $separator =    ";";        // separatore per suddividere l'id dalla stringa slug
    var $spacer =         "_";         // come ti converto gli spazi
    var $path =         "items/view";        // percorso a cui puntare (es. items/view)

    function check($id, $title, $url) {
        $slug = $this->buildSlug($id, $title);
        if ($url!==$slug) {
            $siteurl = Router::url("/");
            header("location: {$siteurl}{$this->path}/{$slug}");
            exit;
        } else {
            return false;
        }
    }

    function buildSlug($id, $title)
    {
        $slug = preg_replace("/[^a-zA-Z0-9\s]/", "", $title);
        $slug = preg_replace("/ /", $this->spacer, $slug);
        $slug = strtolower($slug);
        return $id . $this->separator . $slug;
    }

    function splitSlug($urlslug)
    {
        @list($id, $slug) = preg_split("/[{$this->separator}]/", $urlslug, 2);
        return array('id' => $id, 'slug' => $slug);
    }
}
?>

tutto questo viene richiamato dai controller così:

    function view($slugstr = 1)
    {
    $slugSplit = $this->Slug->splitSlug($slugstr);
        $id = $slugSplit['id'];
        $slug = $slugSplit['slug'];

        $title = "titolo della pagina" // (oppure il tuo codice per recuperare il titolo normale, non sluggato)

        $this->Slug->check($id, $title, $slugstr); // controlla se lo slug è a posto, se non lo è effettua il redirect
    ........

et voilà... ora però vorrei poter accedere a queste funzioni anche da un element, è possibile secondo voi? hmm

Last edited by ToX (10-09-2008 13:50:31)

Namaless

Re: Slug dinamico senza database

hai provato ad'assegnare alla view tipo una variabile

$Slug

all'oggetto

$this->slug

??

ToX

Re: Slug dinamico senza database

non ho capito... a richiamare le funzioni del controller in quel modo dici? temo di si (ho fatto un po' di tentativi sinceramente non ricordo bene quali), però non ha funzionato...

ho provato anche $this->controller->Slug->funzione, come dice il cakesheet... ma nulla da fare

Posts [ 3 ]

Guest posting is disabled. You must login or register to post a reply.

Pages: 1

Topic info

1 guests and 0 users are reading this topic now


Forum quick jump menu

Currently used extensions: pun_topic_online_users, pun_karma, pun_admin_hook_navigator, pun_bbcode. Copyright © 2008 PunBB

[ Generated in 0.043 seconds, 10 queries executed ]