Benötige Hilfe beim Gridview und onclick auf Zelle

Hallo Leutz,

ich hab mal wieder meine kleinen Problemchen.

Ich möchte in meinem GridView auf die <td>-Tags ein Onclick setzen, mit dem ich dann einen Controller-Aufruf mache und Daten dort hin übergebe.

Problematik dabei ist, dass die Variablen/Objekte einfach mal leer sind innerhalb der htmlOptions.

Ich habe schon verschiedene Sachen ausprobiert, aber keines hat mich wirklich zu einer Lösung gebracht. Ich hoffe, das mir hier evtl. jemand helfen kann.

Hier mal mein Probier-GridView:




<?php

$this->widget('zii.widgets.grid.CGridView', array(

    'dataProvider' => $dataProvider,

    'id' => 'grid',

    'columns' => array(

        array(

            'header' => 'ID',

            'value' => '$data->id',

            'htmlOptions' => array(

                'class' => 'td_id',

                'onclick' => CHtml::ajax(array(

                    'update' => '#req_res',

                    'type' => 'POST',

                    'url' => array('ajax/getdetails'),

                    'data' => array(

                        'id' => $data->id,

                    )

                )),

            ),

        ),

    ),

));

?>

<div id="req_res">...</div>



Ob der Controlleraufruf so passt, weiß ich nicht. Funktionieren tut es auf jeden Fall. Ich lasse mir da ein Datum in dem Div zurückgeben. Das Objekt im onclick ist an der Stelle leer und dementsprechend kann da auch nichts übertragen werden.

Ich bin für jeden hilfreichen Tipp dankbar.

Hallo,

probier mal das $data->id in Anführungszeichen zu setzen.




//...

'data' => array(

  'id' => '$data->id',

)



Ich glaube mich erinnern zu können das wenn ein PHP-Ausdruck ohne Anführungszeichen geschrieben wird, wird er einmal am Anfang für das Grid ermittelt. Wenn er in Anführungszeichen geschrieben wird, wird er für jede Row in deinem CGridView geparsed (mit eval?!?) und dementsprechend ermittelt.

Es möge mich jemand korrigieren falls das so nicht stimmt.

Hab mich glaube gerade selber bestätigt da ich die dafür zuständige Method in der CComponent Klasse gefunden habe => evaluateExpression

Wie du am Code dieser Methode sehen kannst wird, falls es sich um einen String handelt (deshalb die Anführungszeichen), mit eval das Ergebnis dieses PHP-Ausdruckes ermittelt und zurückgegeben.

Wenn ich das




$data->id



wie in deinem Beispiel in Anführungsstrichen setze, wird es als String übergeben, aber nicht geparst. Das habe ich auch schon mehrfach probiert. Ich habe auch mal probehalber das ganze




CHtml::ajax(...),



in Anführungsstrichen gesetzt, in der Hoffnung das es dann vielleicht geht, auch das geht nicht.

Hmmm, das value in deinem Fall scheint nicht das value zu sein wo das mit den Anführungszeichen zutrifft

Versuch mal analog zu diesem Wiki Artikel alles unter Anführungszeichen zu setzen.

Edit: Ich hab gerade noch folgenden Bugreport gefunden, in dem qiang xue in seinem Kommentar auf die $.fn.yiiGridView.getKey() verweist.

Ich kapier noch nicht ganz, was du eigentlich erreichen willst (Demo-HTML wie’s aussehen soll wäre hilfreich). Aber evtl. hilft dir das schon mal weiter:

http://www.yiiframework.com/doc/api/1.1/CGridColumn#cssClassExpression-detail

@Mike

Da gibt es nicht viel zu erklären. Ich habe ein GridView, also eine Tabelle. In jeder Zelle steht ein Wert. Man könnte auf jeden Wert ein Link zum Controller setzen. Ich möchte aber direkt in die Zelle klicken um den Controller aufzurufen.

Ich habe es nun so gemacht, das ich doch auf jeden Wert einen Link zum Controller setze und dieses per

CSS:




.td_link {

    display: block;

    cursor: pointer;

}



Auf die ganze Zelle verteile. Funktionieren tut es jedenfalls.

http://www.yiiframework.com/doc/api/1.1/CGridColumn

sollte dir weiterhelfen

wahrscheinlich ist es besser, eine bestimmte Columnklasse zu erweitern