[RISOLTO] CJuiAutoComplete

Ciao a tutti,

sto cercando di far funzionare e mettere in opera questo esempio:

http://www.yiiplayground.cubedwater.com/index.php?r=UiModule/jui/ziiAutocomplete

ma proprio non vuole andare :)

Allora in protected/views/site/giuseppe.php

ho aggiunto questo





$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

	'name'=>'test1',

	//'value'=>'test21',

        'source'=>$this->createUrl('anagrafica/autocompleteTest'),

       	// additional javascript options for the autocomplete plugin

	'options'=>array(

			'showAnim'=>'fold',

	),

));

 




mentre nel controller in protected/controllers/AnagraficaController.php

ho aggiunto questo:





public function actionAutocompleteTest() {

	$res =array();


	if (isset($_GET['term'])) {

		// http://www.yiiframework.com/doc/guide/database.dao

		$qtxt ="SELECT cognome FROM {{Anagrafica}} WHERE cognome LIKE :cognome";

		

                $command =Yii::app()->db->createCommand($qtxt);

		$command->bindValue(":cognome", '%'.$_GET['term'].'%', PDO::PARAM_STR);

		$res =$command->queryColumn();

	}


	echo CJSON::encode($res);

	Yii::app()->end();

        }




ma non va nulla… :)

Se provo a scrivere qualcosa non succede nulla, ma firebugs di chrome mi da questo:





GET http://localhost/yii/cartella/index.php?r=anagrafica/autocompleteTest&term=ba 403 (CHttpException)




Cosa mi sfugge…? ciao e grazie

Giuseppe

ps ho provato cosi direttamennte nella view è funge.




$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

        'name'=>'test2',

        'source'=>array('ac1', 'ac2', 'ac3'),

));



A me sembra ci sia un errore di permessi nella pagina che viene richiamata via ajax.

Prova ad aggiungere ‘autocompleteTest’ alla parte che abilita TUTTI gli utenti:




    public function accessRules() {

        return array(

            ...

            array('allow', // allow all users to perform 'index' and 'view' actions

                'actions' => array('index', 'view', 'autocompleteTest'),

                'users' => array('*'),

            ),

            ...

        );

    }

Ciao Simone e grazie,

nulla non va nemmeno così…

il debug javascript mi da sempre:




GET http://localhost/yii/cartella/index.php?r=anagrafica/autocompleteTest&term=p 403 (CHttpException)



pensavo ma quella variabile term che vedo in querystring non dovrei scriverla nella query che ho nel controller?




public function actionAutocompleteTest() {

        $res =array();


        if (isset($_GET['term'])) {

                // http://www.yiiframework.com/doc/guide/database.dao

                $qtxt ="SELECT cognome FROM {{Anagrafica}} WHERE cognome LIKE :cognome";

                

                $command =Yii::app()->db->createCommand($qtxt);

                $command->bindValue(":cognome", '%'.$_GET['term'].'%', PDO::PARAM_STR);

                $res =$command->queryColumn();

        }


        echo CJSON::encode($res);

        Yii::app()->end();

        }



buona giornata e grazie

Giuseppe

Si fa complicata la faccenda. Hai provato a fare un log per vedere che cosa ti arriva nella variabile _GET?

grande sensorario

ho appena risolto era in effetti un problema di permessi…

e tu me lo avevi pure detto di metterlo nella parte che abilita tutti gli utenti!

ma nella prova che avevo fatto prima forse sbagliavo qualche altra cosa…

non lo so ma ti giuro che stavo per prendere qualche psicofarmaco… per colpa di sta ricerca :)

era cmq come dicevi:

Per chi avesse lo stesso problema, lo script di sopra sia del controller che della view è valido, rimane da inserire solo il nome "autocompleteTest" in tutte e tre le regole e così funziona!!




    public function accessRules() {

        return array(

            array('allow', // allow all users to perform 'index' and 'view' actions

                'actions' => array('index', 'view','autocompleteTest'),

                'users' => array('*'),

            ),

            array('allow', // allow authenticated user to perform 'create' and 'update' actions

                'actions' => array('create', 'update','autocompleteTest'),

                'users' => array('@'),

            ),

            array('allow', // allow admin user to perform 'admin' and 'delete' actions

                'actions' => array('admin', 'delete', 'cancellaAvatar','autocompleteTest'),

                'roles' => array('Admin'),

            ),

            array('deny', // deny all users

                'users' => array('*'),

            ),

        );

    }




prima lo mettevo solo qui come pensavo fosse logico, visto che ero autenticato…




  array('allow', // allow admin user to perform 'admin' and 'delete' actions

                'actions' => array('admin', 'delete', 'cancellaAvatar','autocompleteTest'),

                'roles' => array('Admin'),



è invece pensavo male…

ora capirò anche il perchè…

e mi studierò pure il log, che magari mi evitava di impazzire!

ora rimane che inserire un bel pulsante ricerca, e a tal proposito…

c’è qualche esempio che posso vedere…?

grazie ancora

Giuseppe

Provo a dirtelo io:




    public function accessRules() {

        return array(

            array('allow|deny', // allow all users to perform 'index' and 'view' actions

                'actions' => array('index', 'view','autocompleteTest'),

                'users' => array('*'),

            ),

            array('allow', // allow authenticated user to perform 'create' and 'update' actions

                'actions' => array('create', 'update','autocompleteTest'),

                'users' => array('@'),

            ),

            array('allow',

                'actions' => array('admin', 'delete', 'cancellaAvatar','autocompleteTest'),

                'roles' => array('Admin'),

            ),

            array('deny', // disabiliti tutti

                'users' => array('*'),

            ),

        );

    }



            'users' => array('*') = tutti gli utenti


            'users' => array('@') = gli utenti loggati


            'users' => array('admin') = esattamente l'utente con username uguale a "admin"





            'roles' => array('Admin') = esattamente gli utenti che hanno ruolo "Admin" o superiore

i ruoli esistono dal momento che usi un sistema RBAC = Role Based Access Control.

Ottimo esempio, però una domanda:

Se il valore contenuto nel controllo lo devo assegnare ad una proprietà del mio activeRecord ? Come faccio ? Ho controllato il db mi passa NULL !!

Il valore di ritorno del controllo dov’è ? :mellow:

grazie :rolleyes:

Ok mi autoreplico, qui ho pubblicato una guida completa per questo controllo ::)

Ottima guida Paskuale, l’ho trovata molto utile, anche se non ha risolto completamente la mia esigenza.

Riprendendo il tuo esempio in cui vai a creare un elenco di comuni auto-completante,

io ho l’esigenza di voler aggiungere sopra una combobox contenente l’elenco delle regioni.

E a seconda della regione scelta, il comune auto completante deve mostrare solo i risultati pertinenti (cioè filtrare anche per regione)

Ora, il codice per la regione da aggiungere nel _form.php sarebbe una cosa del genere:




<?php echo $form->labelEx($model,'Regione'); ?>

<?php echo $form->dropDownList($model,'Regione',CHtml::listData(RegioniTable::model()->findAll(array('order'=>'Regione')), 'Regione', 'Regione'),

array(

	'prompt'=>'',

	'style'=>'text-transform: uppercase;',

)); ?>



ma come posso modificare zii.widgets.jui.CJuiAutoComplete affinché invii tramite ‘source’=>$this->createUrl() anche il campo Regione?