Separate Zeilenfärbung in Datenbank [Yii Framework]

nightw@lker

Enthusiast
Thread Starter
Mitglied seit
03.12.2004
Beiträge
1.146
Ort
Freiburg i. Breisgau
Hallo zusammen,

mir wurde als Anfänger in Sachen Programmieren eine relationale PostgreSQL-Datenbank zum Modifizieren zugewiesen.
Als Anwendung wird das PHP Framework von Yii verwendet.

Ich muss eine Zeilenfärbung vornehmen, wenn bestimmte Eigenschaften der Variablen (hier sind es elektronische Komponenten, die aufgelistet werden) auftreten.
Diese wird mit CSS definiert. Angesprochen wird das CSS File widerrum von dem php Befehl "rowCssClassExpression", der auch schon existiert, da eine Variableneingenschaft schon für die Zeilenfärbung definiert ist.
Ich möchte nun bei einer bestimmten zweiten Eigenschaft eine weitere Zeilen-Färbung erzwingen, geriet aber ins Stocken.

Hier einmal die Codes zu Übersicht:

PHP:
$data = array(
	'id'=>'components-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'ajaxUrl'=>array('components/searchAjax','scenario'=>$params['scenario']),
	

	'rowCssClassExpression'=>'$data->verified ? ($row%2 ? "even" : "odd") : "unverified"',         // schon existierender Befehl
        'rowCssClassExpression'=>'$data->uptodate ? ($row%2 ? "even" : "odd") : "unuptodate"',      // neue Variableneingeschaft, die ebenfalls zu einer Färbung führen soll

        'columns'=>array(
        ...

Der besagte rowCssClassExpression Befehl ist mit dem folgenden CSS Befehl verknüpft, der dann die Farbe der Zeile definiert:

Code:
/* grid.css */
...
.grid-view table.items tr.unverified {background-color: #E0EDE0;}
.grid-view table.items tr.unuptodate {background-color: #DBD4DA;}      // Zeilenfärbung für die neue Variableneigenschaft
...

Das Problem ist nun, dass ich, sobald ich einen weiteren rowCssClass - Befehl implementiere (wie hier im Code-Beispiel gemacht), der erste einfach ignoriert wird - sprich, es wird immer nur der letzte Befehl umgesetzt.

Wie kann ich dieses Problem umgehen?
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Hi,
du kannst natürlich nicht zwei mal den gleichen Namen für einen Eintrag in deinem Array/Hash benutzen. Mit dem zweiten rowCssClassExpression überschreibst du den ersten.

Ohne den restlichen Code zu kennen: du solltest die beiden CSS Klassen zusammen setzen.

Das Beispiel ist freilich ungetestet und nicht sehr schön umgesetzt, geht nur um die grundsätzliche Idee ;)
PHP:
$css = "";
if (!$data->verified){
  $css .= "unverified";
}
if(!$data->uptodate){
  $css .= " unuptodate";
}
if ($css == ""){
  $css .= $row%2 ? "even" : "odd"
}


$data = array(
    'id'=>'components-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'ajaxUrl'=>array('components/searchAjax','scenario'=>$params['scenario']),

    'rowCssClassExpression'=>$css,         // schon existierender Befehl

    'columns'=>array(
        ...

Alternativ kannst du natürlich eine weitere property deinem Array hinzufügen und im Template (oder sonstwo) benutzen.
 
Ich hab keine Ahnung von dem Framework, aber ich bin mir nicht sicher ob das mit dem vorher ermitteln so funktioniert. Bei 'rowCssClassExpression' weisst er nicht direkt Variablen zu, sondern einen String der dann wohl zur Laufzeit via eval ausgeführt wird. Ich denke mal die korrekte Lösung wird wohl analog zu dem hier sein: Syntax Error In Expression Of Rowcssclassexpression - Yii Framework Forum sprich man schreibt eine Methode, die dann zur Laufzeit aufgerufen werden kann und man den CSS String dann dort drin baut (via $this->verified, etc.) und zurück gibt.
 
Naja, bei einer Variablen (bzw. Variableneigenschaft) existiert ja schon eine Zeilenfärbung, die auch einwandfrei funktioniert.
Dies jedoch auch bei einer zweiten Variablen(eigenschaft) zu aktivieren, schlug bis jetzt mit dem schon vorhandenen rowCssClassExpression Befehl leider fehl...

Aber ich werde mich mal an einer neuen Methode versuchen, danke auf jeden Fall für die bisherigen Ratschläge.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh