La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 5 ]

Namaless

Topic: [1.2] Mettere un form "commenti" nel post del blog

Sarà pure stupida come cosa, ma stò cercando valide alternative e vorrei qualche consiglio.

Usare "->element('nome_elemento')" oppure usare il RequestHandler, oppure direttamente Ajax?

Grazie per i consigli smile

P.s. Saiborg potresti darmi anche il tuo consiglio visto che lo hai già fatto? tongue

Saiborg

Re: [1.2] Mettere un form "commenti" nel post del blog

Avevamo discusso della cosa qui: http://www.cakephp-it.org/topic67-menu-dinamico.html

Lì si parlava di un menu dinamico, ma quella soluzione secondo me è ottimale per qualsiasi "elemento dinamico".

Namaless

Re: [1.2] Mettere un form "commenti" nel post del blog

Saiborg wrote:

Lì si parlava di un menu dinamico, ma quella soluzione secondo me è ottimale per qualsiasi "elemento dinamico".

Purtroppo il problema è legato ai messaggi di errore di validazione smile

Ho risolto utilizzando una funzione in "beforeRender":

// ./app/app_controller.php
    function beforeRender()
    {
        $this->_persistValidation();
    }

    /**
     * Called with some arguments (name of default model, or model from var $uses),
     * models with invalid data will populate data and validation errors into the session.
     *
     * Called without arguments, it will try to load data and validation errors from session 
     * and attach them to proper models. Also merges $data to $this->data in controller.
     * 
     * @author poLK
     * @author drayen aka Alex McFadyen
     * 
     * Licensed under The MIT License
     * @license            [url]http://www.opensource.org/licenses/mit-license.php[/url] The MIT License
     */
    function _persistValidation() {
        $args = func_get_args();
        
        if (empty($args)) {
            if ($this->Session->check('Validation')) {
                $validation = $this->Session->read('Validation');
                $this->Session->del('Validation');
                foreach ($validation as $modelName => $sessData) {
                    if ($this->name != $sessData['controller']){
                        if (in_array($modelName, $this->modelNames)) {
                            $Model =& $this->{$modelName};
                        } elseif (ClassRegistry::isKeySet($modelName)) {
                            $Model =& ClassRegistry::getObject($modelName);
                        } else {
                            continue;
                        }
        
                        $Model->data = $sessData['data'];
                        $Model->validationErrors = $sessData['validationErrors'];
                        $this->data = Set::merge($sessData['data'],$this->data);
                    }
                }
            }
        } else {
            foreach($args as $modelName) {
                if (in_array($modelName, $this->modelNames) && !empty($this->{$modelName}->validationErrors)) {
                        $this->Session->write('Validation.'.$modelName, array(
                                                        'controller'            =>    $this->name,
                                                        'data'                     => $this->{$modelName}->data,
                                                        'validationErrors'     => $this->{$modelName}->validationErrors
                        ));
                }
            }
        }
    }

E nel processo di invio del commento:

    function add()
    {
        if ( ! empty($this->data) )
        {
            $this->Comment->create();

            if ( $this->Comment->save($this->data) )
            {
                $this->Session->setFlash(__('Your comment has been saved.', TRUE));
                $this->redirect($this->referer() . '#comment-' . $this->Comment->id);
            }
            else
            {
                $this->_persistValidation('Comment');
            }
        }

        $this->redirect('/posts/view/'.$this->Session->read('Validation.Comment.data.Comment.post_id'), null, true); 
    }

Purtroppo con questo sistema e l'uso del Language Switch ho dovuto ovviare andando a leggere l'id del post a mano, in quanto se uso

$this->redirect($this->referer());

mi aggiungeva la lingua all'url generando così un'errore.. sad

Ho visto che tu hai soluzionato bene (quanto meno il lato front-end è fatto a dovere) e mi chiedevo come avevi ovviato tu al problema big_smile

Saiborg

Re: [1.2] Mettere un form "commenti" nel post del blog

In realtà ho fatto la cosa più semplice e basta perché lì per lì non mi serviva nulla di "riutilizzabile" tongue
Non c'è un controller per i commenti, il form chiama la pagina stessa (PostsController::view) che, se ci sono dati, salva nel modello Comment.

Namaless

Re: [1.2] Mettere un form "commenti" nel post del blog

Saiborg wrote:

Non c'è un controller per i commenti, il form chiama la pagina stessa (PostsController::view) che, se ci sono dati, salva nel modello Comment.

Come avevo fatto prima io.. solo che progettualmente non mi piace e allora ho preferito ovviare al problema portandomi dietro gli errori di validazione tramite una piccola funzione wink

E' interessante sapere come funzionano i TrackBack visto che in materia sono veramente all'asciutto.. sad

Posts [ 5 ]

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

Pages: 1

Topic info

0 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.042 seconds, 12 queries executed ]