try calling it statically, Zend_Json::encode($data);

On Sun, Dec 14, 2008 at 11:39 PM, Ace Paul <sa...@acewebdesign.com.au>wrote:

>
> thanks for your help on this.
> I'm trying to get this going, but not having any luck at all, especially
> seeing as I haven't used json with zend yet.
>
> I'm getting this error in my controller file.
>
> Method "encodeJson" does not exist and was not trapped in __call()
>   public function _prepareautocompletion($data) {
>        $items = array();
>        foreach ($data as $key => $value) {
>            $items[] = array('label' => $value, 'name' => $value, 'key' =>
> $key);
>        }
>        $final = array(
>            'identifier' => 'key',
>            'items' => $items,
>        );
>        return $this->encodeJson($final);
>    }
>
> this is my autocompleteAction in CategoryController.php
>
>  function autocompleteAction ()
>        {
>                $this->getHelper('viewRenderer')->setNoRender();
>                $request = $this->getRequest();
>                $category_id =
> (int)$this->_request->getParam('category_id');
>                $race = new Race();
>                $races = $race->getCategoryRaces($category_id); // function
> to output all
> races
> $this->view->races = $this->_prepareautocompletion($races);
>        }
>
>
> Ok, now theres a couple things here i'm unsure of.
> Firstly because this is setup with the first select box not populated
> because it is expecting data from a data store, how am I to pass this info
> into the json request. I'm sure I'm way off track with this one.
> And Second, why am I getting the json error. Do I need to set something up
> before hand for this to work.
>
> thanks
> Paul
>
>
> Themselves wrote:
> >
> > I have spent WAY too much time getting this exact scenario working using
> > Zend Dojo forms and an MVC environment, and I plan on building an
> > extensive
> > article explaining it all soon, but for now, here's the really quick and
> > dirty version. I haven't gotten my version perfect yet, I'm still not
> > happy
> > with the URLs I'm calling to retrieve the data, but that's not a huge
> > deal.
> > Anyway, on with the show.
> >
> > First of all, here's your two form elements.
> >
> >         $this->addElement('FilteringSelect', 'fk_client_id', array(
> >             'label'        => 'Client:',
> >             'storeId' => 'clientStore',
> >             'storeType'=> 'dojo.data.ItemFileReadStore',
> >             'storeParams' => array( 'url' =>
> > '/clients/autocomplete/format/ajax?autocomplete=1&str=*',),
> >             'autoComplete'   => 'false',
> >             'hasDownArrow'   => 'true',
> >             'id' => 'fk_client_id',
> >         ));
> >
> >         $this->addElement('FilteringSelect', 'fk_client_contact_id',
> > array(
> >             'label'        => 'Client contact:',
> >             'storeId' => 'clientContactStore',
> >             'storeType'=> 'dojo.data.ItemFileReadStore',
> >             'autoComplete'   => 'false',
> >             'hasDownArrow'   => 'true',
> >             'id' => 'fk_client_contact_id',
> >         ));
> >
> > Now for the javascript, this has to appear somewhere on the page that
> > contains the form.
> >
> > dojo.connect(dijit.byId('fk_client_id'), 'onChange', function () {
> >         dijit.byId('fk_client_contact_id').store = new
> > dojo.data.ItemFileReadStore({ url:
> > "/clientcontacts/autocomplete/format/ajax?autocomplete=1&fk_client_id=" +
> > dijit.byId("fk_client_id").value });
> > });
> >
> >
> > As for the URLs for the Datastores, they are kind of an exercise for the
> > reader, other than to say they obviously should filter correctly on the
> > passed parameters, and they have to return JSON. This part was pretty
> > annoying, but I eventually found that a function like this returns the
> > correct JSON format:
> >
> >     public function prepareAutoCompletion($data) {
> >         $items = array();
> >         foreach ($data as $key => $value) {
> >             $items[] = array('label' => $value, 'name' => $value, 'key'
> =>
> > $key);
> >         }
> >         $final = array(
> >             'identifier' => 'key',
> >             'items' => $items,
> >         );
> >         return $this->encodeJson($final);
> >     }
> >
> >
> > You pass in to the function an array of id => value pairs, and it will
> > output the correct JSON for the FilteringSelects. If you use the built in
> > AutoCompleteDojo helper, it won't use the id from your table as the value
> > that the form submits, which is pretty much useless.
> >
> > Oh, and one more trick, for the Edit action, you are going to need to
> > include something like this:
> >
> > $form->populate($row);
> > $form->getElement('fk_client_contact_id')->setStoreParams(array( 'url' =>
> > '/clientcontacts/autocomplete/format/ajax?&autocomplete=1&fk_client_id='
> .
> > $form->getElement('fk_client_id')->getValue() ));
> >
> > So that it prepopulates the form correctly.
> >
> > I promise I'll write up a really impressive document that spells this
> > whole
> > thing out in painstaking detail, I'm just absolutely flat out until
> > christmas, I haven't had any time!
> >
> >
> > On Tue, Dec 9, 2008 at 10:58 AM, Ace Paul <sa...@acewebdesign.com.au>
> > wrote:
> >
> >>
> >> I have a form, which I would like to use dependent drop downs in. I
> can't
> >> seem to find anything about it hear, after looking all morning trying to
> >> work it out.
> >> I have one field "race_country"
> >> when an option is selected I would like to show the cities in that
> >> country.
> >> The following is what I have currently in the form, which will show all
> >> countries and all cities.
> >> Any help would be great. thanks
> >>
> >> $table = new Country();
> >> foreach ($table->fetchAll() as $c) {
> >>    $country->addMultiOption($c->country_id, $c->country_name);
> >> }
> >>  $this->addElement( $country);
> >>
> >>  $city = new Zend_Form_Element_Select('race_city');
> >> $city->setLabel('City')
> >>         ->setRequired(true);
> >>
> >> $table = new City();
> >> foreach ($table->fetchAll() as $c) {
> >>    $city->addMultiOption($c->city_id, $c->city_name);
> >> }
> >>  $this->addElement( $city);
> >> --
> >> View this message in context:
> >>
> http://www.nabble.com/How-to-set-up-dependant-dropdowns-in-form-tp20907379p20907379.html
> >> Sent from the Zend Framework mailing list archive at Nabble.com.
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/How-to-set-up-dependant-dropdowns-in-form-tp20907379p21000925.html
> Sent from the Zend Framework mailing list archive at Nabble.com.
>
>

Reply via email to