In der View eine Kombination aus Feldern anzeigen

Ausgabedaten formatieren und darstellen

In der View eine Kombination aus Feldern anzeigen

Beitragvon phyrexianer am Mo 22. Jun 2009, 16:09

Aaaaaaaaaaalso

ich habe folgendes Problem, In der View bentzte ich den FormHelper um Namen in eine datenabnk ein zu tragen. der Form Helper gibt mir ein DropDownMenü mit der Namen.
Mein Problem ist, dass der Formhelper nur ein Feld der Tabelle verwendet also entweder die 'id' oder 'name' oder 'forname'

ich kann im Model mit 'afterFind' ein 'pseudoFeld' erzuegen aber wie Bringe ich den View dazu dieses Pseudefeld zu benutzen ???
Code: Alles auswählen
$authors = $this->Publication->Author->find('list',array('fields'=>array('Author.name','Author.fullName');

geht in die Hose weil cake dann in der DB nach dem FELD 'fullName' sucht.
Der Versuch im Model
Code: Alles auswählen
 function afterFind($results) {
        // For any results returned from the 'User' model, take 'firstName' and 'lastName' and use them to produce a 'fullName' pseudofield.
        foreach ($results as $n => $data){
            $results[$n]['Author']['xxx']=$results[$n]['Author']['name'].$results[$n]['Author']['city'];
        }
     }
      var $displayField = 'xxx';

schlägt mit der Fehlermeldung
Code: Alles auswählen
SQL Error: 1054: Unknown column 'Location.xxx' in 'field list' [CORE\cake\libs\model\datasources\dbo_source.php, line 525]
 
fehl

könnt Ihr mir einen Ansatz geben mit dem ich vielleicht weiter arbeiten kann ?
THX
phyrexianer
 
Beiträge: 25
Registriert: Fr 19. Jun 2009, 10:52

Re: In der View eine Kombination aus Feldern anzeigen

Beitragvon euromark am Mo 22. Jun 2009, 16:13

euromark
 
Beiträge: 397
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 1.2.4
OS: Windows

Re: In der View eine Kombination aus Feldern anzeigen

Beitragvon phyrexianer am Do 25. Jun 2009, 09:20

Thx.... war zwar schon mal auf der Seite habe das aber nicht so 100% überblickt... jetzt habe ich das aber doch Begriffen und es geht doch recht einfach. Der Vollständigkeit halber führe ich das hier aber noch auf.

Um mein Ziel zu erreichen habe ich die Set::combine Methode benutzt
Code: Alles auswählen

$users = $this->User->find('all');

//erzeugt folgenden code
Array (
  [0] => Array(
     [User] => Array(
        [id] => 23,
        [first_name] => 'John',
        [last_name] => 'Doe',
        [user_type_id] => 1
     ),
     [UserType] => array(
        [id] => 1,
        [name] => 'Cool User'
     )
  ),
  .....etc
)
 

Folgenden code im Controller verwenden
Code: Alles auswählen

$users = $this->User->find('all');
$users = Set::combine(
               $users,
               '{n}.User.id',
               array(
                 '{0}, {1} ({2})',
                 '{n}.User.last_name',
                 '{n}.User.first_name',
                 '{n}.UserType.name'
               )
        );
$this->set('users',$users);

//erzeugt dann folgende Ausgabe

Array(
  [23] => 'Doe, John (Cool User)'
)
 


bei einer Größeren Anwendung sollte man sich dann auch mal den Code vom Kommentar 22 Ansehen, sieht für mich nach der elegantesten Lösung aus.
phyrexianer
 
Beiträge: 25
Registriert: Fr 19. Jun 2009, 10:52

Re: In der View eine Kombination aus Feldern anzeigen

Beitragvon euromark am Do 25. Jun 2009, 10:02

hier ein beispielstück von code, wenn man sauber mit behaviours arbeiten möchte:

Code: Alles auswählen
    var $actsAs = array('MultipleDisplayFields' => array(
        'fields' => array('User.first_name', 'User.middle_name', 'User.last_name'),
        'defaults' => array('---','','----'),
        'pattern' => '%s %s %s'
    ));


wobei ich den behaviour code etwas modifiziert habe (um eben solche default werte mit übermitteln zu können)
euromark
 
Beiträge: 397
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 1.2.4
OS: Windows

Re: In der View eine Kombination aus Feldern anzeigen

Beitragvon mivogtLU am Do 14. Jan 2010, 13:19

.. ein anderer möglicher Ansatz (wenn dich ein paar mehr Daten in der DB nicht stören) wäre es,
ein Zusatzfeld in der DB anzulegen zb 'Kunde'.'displytext'.
Das Feld kannst du dann probehalber erstmal beim add/edit manuell belegen.

Später kannst du dann (wenn ich cake und das einzige Buch das ich dazu gefunden habe richtig begreife) im Model eine Definition für ein beforeSave() einbauen in der dann das Feld mit einem Text belegt wird den du dir autom. Zusammenbauen könntest.
zB
$this->displaytext = this->'KdNr' . ' -- '. this->'vorname' .' ' .this->'Nachname';

.. wenn ich hier die Syntax ein wenig vergeigt haben soltle kommt aber sicher dennoch der Gedanke rüber hoffe ich.

Im Buch zu Cake findet sich das übnrigens unter dem Begriff Model-Callbacks auf Seite 256.
Online auf der cakephp seite unter
http://api.cakephp.org/class/model#method-ModelbeforeSave
mivogtLU
 
Beiträge: 46
Registriert: Di 12. Jan 2010, 21:22
Wohnort: 67059
CakePHP-Version: 1.3 final
OS: Linux, Win XP-Vista

Re: In der View eine Kombination aus Feldern anzeigen

Beitragvon euromark am Do 14. Jan 2010, 14:25

sicher n möglicher ansatz
allerdings ensteht dadurch u.U. schon einiges an Redundanz

da finde ich die "multiple display field" lösung eigentlich eleganter
zumal sie flexibler ist (was wenn du woanders nochma 3 andere versionen von displayFields brauchst - kannst ja nich für alle n extra feld in der db einbauen)
euromark
 
Beiträge: 397
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 1.2.4
OS: Windows


Zurück zu Views

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron