Ajax Fähigkeit in YII

Hallo Zusammen.

Ich beschäftige mich mitlerweile schon eine ganze Weile mit dem Yii Framework. Für ein Projekt das 2 Freunde und ich machen müssen haben wir uns für diese Framework entschieden.

Da ich schon unzählige Stunden damit verbracht habe raus zu finden ob Yii Ajax in der Art und weise einbinden kann wie das Ext Framework macht, und ich leider nicht fündig geworden bin, da die Dokumentation in der Hinsicht nicht so direkt drauf eingeht, wollte ich euch fragen:

Kann man aus einem mit Widget generiertes Dropdown List einen vom Benutzer ausgewählten Wert als Parameter in ein AJAX Request übergeben damit dieser zu dem im Dropdown Listenfeld gewählten (z.B. Produkttyp) die passenden Parameter aus einer Tabelle ausliest und zurückgibt??

DropDowmnlist Produkttyp

[0] [Farbdrucker]

[1] [Laserdrucker]

[2] [Netbook]

[3] [Workstation]

Mir ist klar, das ich das mit JavaScript durchaus lösen kann, nur wie ich z.B. die Prototype einbinde ist mir noch nicht ganz klar.

Wäre sehr Dankbar für eure Hilfe. MfG

yii benutzt standardmäßig jquery

du solltest dir CClientScript anschauen…

zum Bsp




Yii::app()->clientScript->registerScript('id', "jQuery('#selectbox').change(function(){alert(jQuery(this).val());})");



Hey mbi

Danke für die schnelle Antwort. Werde mir das mal ansehen.

Vielleicht gelingt es mir ja doch, die ID aus dem dropdown feld dessen wert ausgewehlt wurde mittels Ajax zu übermittel um andere Daten nachzuladen.

Danke nochmal

Geht relativ simpel. Benutzt man das Yii-eigene Widget muss man das in JS Options eintragen. Zum Beispiel so:




'options'=>array(

	'select'=>'js:function(event, ui) {

		$.ajax({url:"'.Yii::app()->createUrl('route/to/action').'",

			data: {id: ui.item.id},

			success: function(data) {

				$("#id").html(data.content);

			},

			dataType:"json"

		});

	}',

),




data: {id: ui.item.id},

schickt die ID des ausgewählten Elements als GET-Parameter mit. Die muss dann nur noch im Controller richtig verarbeitet werden.

lg, yodel

Hey yodel

Also nach langen suchen bin ich endlich fündig geworden und habe mittlerweile nicht mehr das Problem einen Request zu senden bzw. zu verarbeiten.

Habe dafür mein nächstes erhalten. Ich möchte Daten aus einer Tabelle auslesen die den Wert den der Request zurückliefert mit dem in einer Zwischentabelle vergleichen und zurückgeben.

Meine SQL Anweisung hab ich schon, die auch funktioniert. Habe im Controller eine Methode vom Model aufgerufen und diesen Wert aus dem Request übergeben damit der an die SQL Where Klausel angehängt wird.

$id_return=Attribut::model()->Abfrage($id_request=$_POST[‘Produkt’][‘protyp_id’]);

Weiß allerdings nicht genau ob ich ein Array oder Objekt zurückbekomme bzw. wie ich die daten dann im View ausgeben kann.

Hier mal der SQL String im Model

$sql="SELECT att_bezeichnung, att_attribut_id FROM tattribut WHERE att_attribut_id

    		IN (SELECT att_id FROM tprodukttyp_attribut WHERE protyp_id = $this->_idrequest)";

Sorry für die Formatierung.

Verwende ziemlich das erste mal ein Forum

LG

Ouch! Unbedingt bitte vorher den Guide durchgehen. Yii hat schon genug Methoden um die Abfrage der DB zu erleichtern.

Controller:




$id = (int) $_POST['Produkt']['protyp_id'];

$attribut = Attribut::model()->findByPk($id);



ABER!

Wenn ich mir das aber so ansehe, wäre es glaube ich sinnvoll zuerst noch ein paar PHP-Tutorials durchzulesen.

(Ich darf noch keine Links posten. Dürfte eine Antispam-Maßnahme sein.)

Bitte unbedingt mal diese zwei Artikel lesen. Ich glaube die sind ein guter Start. Dann erst solltest du dich auf ein PHP-Framework stürzen.

at2.php.net/manual/de/function.var-dump.php

at2.php.net/manual/de/function.print-r.php

lg, yodel

Hi

Also, leider konnte ich nicht früher schreiben, da ich krank war.

Es geht eigentlich nach wie vor um die Abfrage von meinen Daten.

Es ist so, das ich im Controller den Aufruf mache das er mir alle Datensätze aus der Zwischentabelle mit dem Key zurück liefert der im Request übergeben wird. Das funkt auch.

[color="#8B0000"]$data=ProdukttypAttribut::model()->findAll(‘protyp_id=:protyp_id’, array(’:protyp_id’=>(int) $_POST[‘Produkt’][‘protyp_id’]));[/color]

Weiters wollte ich dann das in eine Liste ausgeben und dafür die Attribut Bezeichnung aus der Attribut Tabelle als Value ausgeben.

[color="#A0522D"]$data=CHtml::listData($data,‘att_id’,‘att_bezeichnung’);

foreach($data as $id => $value)


	{


		echo CHtml::tag('option', array('value'=>$id),CHtml::encode($value),true);


	}[/color]

Jedoch schreibt er mir dann folgende Fehlermeldung:

(Property "ProdukttypAttribut.att_bezeichnung" is not defined.)

Was könnte da bei den Relations im Model nicht passen, das er auf die Bezeichnung der attribut Tabelle nicht zugreifen kann?

Bitte um Rat. Danke LG

PS: Ich habe soweit einen Crachkurs in sachen PHP hinter mir und brauche es für unser Projekt.

Vielleicht geht das hier:


$data=CHtml::listData($data,'att_id','relation.att_bezeichnung');