Bitte um Hilfe !! Ausgabe in Fluid ist unvollständig. [Gelöst]

  • 0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    09. 03. 2012, 20:00

    Schönen guten Abend miteinander.

    Ich bin auf eure Hilfe angewiesen. Ich versuche gerade ein Ausgabe mit Fluid zu erzeugen. Funktioniert soweit, aber es werden nicht alle Daten aus der DB angezeigt. Hier mein Template:

    <table >
    <tr>
    <th>uid</th>
    <th>name</th>
    <th>address</th>
    <th>telephone_number</th>
    <th>email_address</th>
    <th>description</th>
    <th>tstamp</th>
    <th>crdate</th>

    </tr>
    <f:for each="{organizations}" as="org">
    <tr>
    <td valign="top">{org.uid}</td>
    <td valign="top">{org.name}</td>
    <td valign="top"><f:format.crop maxCharacters="100">{org.address}</f:format.crop></td>
    <td valign="top">{org.telephone_number}</td>
    <td valign="top">{org.email_address}</td>
    <td valign="top"><f:format.crop maxCharacters="100">{org.description}</f:format.crop></td>
    <td valign="top">{org.tstamp}</td>
    <td valign="top">{org.crdate}</td>

    </tr>
    </f:for>
    </table>

    uid, name, address und description werden angezeigt. Der Rest leider nicht. Wenn ich mit phpmyadmin die Tabelle anschaue sind die Daten z.b. email_address oder tstamp vorhanden, jedoch werden nicht alle im Template ersetzt. Am Feldtyp kann es nicht liegen, hab ich schon geändert. Im Template als Platzhalter z.b. org.crdate ist crdate das Datenbankfeld, stimmt auch alles. Weiss nicht was da los ist Könnt ihr mir bitte weiterhelfen ?

    Vielen Dank im voraus.

    Schöne Grüsse aus Bern, Thomas


  • 1
  • BFSven BFSven
    R2-D2
    0 x
    106 Beiträge
    2 Hilfreiche Beiträge
    12. 03. 2012, 08:34

    Moin,

    ist org ein Objekt oder ein Array?
    Wenn es ein Objekt ist, sind dann alle Getter definiert?

    Wenn es ein Array ist, lass Dir doch $organizations mal vor dem assign ausgeben, bzw ein org innerhalb der foreach mit <f:debug>{org}</f:debug>. Sind dort alle Daten da?

    Gruß, Sven

  • 0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    12. 03. 2012, 10:24

    Hallo Sven,

    Erst mal vielen Dank für deine Antwort, das hat mich heute echt wieder motiviert. :-) Ja, es sind alle Setter und Getter definiert, es ist diese offizielle sjr_offers Extension. Die Namenskonventionen passen auch. Die Methode bzw. Eigenschaft im Objekt bzw. in der Klasse heisst bei der Emailadresse z.B.: setEmailAddress, getEmailAddress, $emailAddress. In der Datenbanktabelle heisst das Feld email_address. So schaut der Controller aus:

    class Tx_SjrOffers_Controller_OrganizationController extends Tx_Extbase_MVC_Controller_ActionController {

    public function listAction() {
    $organizationRepository = t3lib_div::makeInstance('Tx_SjrOffers_Domain_Repository_OrganizationRepository');
    $offerRepository = t3lib_div::makeInstance('Tx_SjrOffers_Domain_Repository_OfferRepository');
    $organization_list = $organizationRepository->findAll();
    debug(array($organization_list));
    $offer = $offerRepository->findAll();
    $this->view->assign('organizations', $organization_list);
    $this->view->assign('offers', $offer);
    }
    }

    Wenn ich innerhalb der foreach mit <f:debug>{org}</f:debug> eine Ausgabe mache, bekomme ich nur einen Weissen Screen. Das selbige geschieht, wenn ich im Controller mit debug(array($organization_list)); ein Ausgabe erzeuge. Ich hab Eclipse und xdebug installiert. Nun habe ich in der Zeile $offer = $offerRepository->findAll(); einen Breakpoint gesetzt und gehe nun schrittweise vor. In der nächsten Zeile gehe ich mit "Step into" in diese debug methode rein. Er springt mir dann in die Datei conig_default.php. Da kann ich mit "Step Over" bis zur Zeile t3lib_utility_Debug::debug($variable, $title, $group);. So, jetzt gehe ich mit "step into" in diese methode rein um zu schauen, dann springt er mir in die datei class.t3lib_utility_debug.php zeile 59 jetzt mache ich wieder "step over" bis zur zeile 338: $string .= print_r($val, TRUE); wenn ich jetzt mit "step into" da reingeh, dann landet er in der klasse class.t3lib_svbase.php

    function __destruct() {
    $this->unlinkTempFiles(); //In dieser Zeile steht er jetzt.
    }

    jetzt mit step insto da rein. komme ich auf die klasse class.t3lib_svbase.php zeile 438

    wenn ich nun mit step over weitermache springt er mir in die klasse class.t3lib_lock.php

    function __destruct() {
    $this->release(); // Hier her springt er jetzt. jetzt mache ich mit step over weiter, dann sppringt er in die methode release()
    }

    /**
    * Release the lock
    *
    * @return boolean Returns TRUE on success or FALSE on failure
    */
    public function release() {
    if (!$this->isAcquired) {
    return TRUE;
    }

    $success = TRUE;
    switch ($this->method) {
    case 'simple':
    if (t3lib_div::isAllowedAbsPath($this->resource) && t3lib_div::isFirstPartOfStr($this->resource, PATH_site . 'typo3temp/locks/')) {
    if (unlink($this->resource) == FALSE) {
    $success = FALSE;
    }
    }
    break;
    case 'flock':
    if (flock($this->filepointer, LOCK_UN) == FALSE) {
    $success = FALSE;
    }
    fclose($this->filepointer);
    if (t3lib_div::isAllowedAbsPath($this->resource) && t3lib_div::isFirstPartOfStr($this->resource, PATH_site . 'typo3temp/locks/')) {
    unlink($this->resource);
    }
    break;
    case 'semaphore':
    if (@sem_release($this->resource)) {
    sem_remove($this->resource);
    } else {
    $success = FALSE;
    }
    break;
    case 'disable':
    $success = FALSE;
    break;
    }

    $this->isAcquired = FALSE;
    return $success;
    }

    wenn ich jetzt mit step over weitermache, arbeitet er diese methode ab. am schluss steht in der variable $success der Wert true.

    dann springt er wieder zurück zum destruktor und hängt dann...

    function __destruct() {
    $this->release(); // Hier hängt er jetzt
    }

    da ich mich mit debugging noch nicht sehr gut auskenne, hab da eclipse und xdebug erst vor einer woche installiert, weiss ich nicht was ich jetzt machen soll.

    Vielen Dank schon mal vorab. :)

    Liebe Grüsse

    Thomas

  • BFSven BFSven
    R2-D2
    0 x
    106 Beiträge
    2 Hilfreiche Beiträge
    12. 03. 2012, 11:49

    Hallo Thomas,

    die weiße Seite kommt wahrscheinlich daher, dass das Debug einfach zu groß ist und er deswegen zu viel Speicher reservieren will. Kommst du an die Error-Log vom Server?

    XDebug kann ich grad nicht verwenden, weil ich keinen Plan hab, wie ich mit meinem ZendStudio das Remote-Debugging einrichte :( Und mit den Typo-Methoden kann ich grad leider auch nicht so viel anfangen.

    $organization_list ist doch ein Array of organizations oder? Kannst Du dir das erste ausgeben? oder durchiterieren und getEmailAddress ausgeben lassen?

    probiere mal statt

    1. <td valign="top">{org.email_address}</td>
    ein
    1. <td valign="top">{org.emailAddress}</td>

    Gruß

  • 0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    12. 03. 2012, 12:36

    Hallo Sven,

    Erst mal, viele vielen Dank.

    So funktioniert es. <td valign="top">{org.emailAddress}</td>

    Dann ist es also so, dass man in Fluid den Namen der get Methode angeben muss ? Weil im Buch Stand, dass man den Namen des Datenbank Felds für die Ausgabe benutzen muss. Habe das bei name z.b. ausprobiert, da wird eine Ausgabe generiert sowohl bei <td valign="top">{org.Name}</td> als auch bei <td valign="top">{org.name}</td>. Weisst du warum das so ist ? Richtig wäre dann wahrscheinlich <td valign="top">{org.Name}</td> könnte ich mir vorstellen.

    crdate und tstamp wird immer noch nicht ausgegeben. weisst du vielleicht warum ? crdate und tstamp werden auch nicht über ein formular eingepflegt, kann das sein dass das darum nicht geht ? ausgeben muss man sie aber schon können oder ? ich habe mal eine set und get Methode in die klasse organizations geschrieben bekomme jedoch trotzdem nichts angezeigt.

    /**
    * Sets the timestamp
    *
    * @param string The Timestamp
    * @return void
    */
    public function setTstamp($tstamp) {
    $this->tstamp = $tstamp;
    }

    /**
    * Returns the Timestamp
    *
    * @return string The Timestamp
    */
    public function getTstamp() {
    return $this->tstamp;
    }

    error_log vom Server: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 104079361 bytes) in C:\xampp\htdocs\wowa\t3lib\utility\class.t3lib_utility_debug.php on line 338

    Was kann ich denn machen wenn das debug zu gross ist ? Kann man da einen Wert hochdrehen, damit er mehr Speicher zur Verfügung hat ?

    Puuuh, da hast du mir echt sehr geholfen, hab wieder was dazugelernt, super. Bin schon fast verzweifelt, weil ich ziemlich viel ausprobiert hab ausser deiner Lösung natürlich. :-) War fast 2 einhalb ganze Tage da dran, hab an alles andere gedacht nur nicht das. Hmmmmm.

    Vielen, vielen Dank nochmals.

    Liebe Grüsse

    Thomas

  • BFSven BFSven
    R2-D2
    0 x
    106 Beiträge
    2 Hilfreiche Beiträge
    12. 03. 2012, 12:54

    Genau, Du musst den Namen der Property benutzen. Dabei ist es egal ob du es groß oder klein schreibst (zumindest den Anfang), da Extbase den ersten Buchstaben dann sowieso groß schreibt und ein get davor packt und prüft ob es die Methode gibt. Vorher wird glaub ich noch geprüft, ob es eine public-Eigenschaft mit diesem Namen gibt.

    "tstamp" ist kein Property vom Objekt, weder von Deinem noch von einer Elternklasse. Deswegen kann er "return $this->tstamp" auch nicht machen. Du könntest versuchen tstamp als Property zu definieren, ich weiß aber nicht ob das dann nicht zu Nebeneffekten führt.

    Du könntest versuchen Deinen memory_limit zu erhöhen, oder aber (was vielleicht besser ist) nicht ganz so große Objekte zu debuggen/vardumpen. Wenn Du zb wissen willst, ob ein Repository befüllt ist, brauchst du nicht alle objekte zu holen, ein ->countAll() reicht meistens auch aus. und wenn Du wissen willst, wie so ein Objekt aussieht machst Du ein ->current() auf das Ergebnis.

  • 0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    12. 03. 2012, 14:40

    Hi...

    Also wenn ich ne property zuweise, die set- und get- Methoden anfüge, und das TCA um ein Eingabefeld tstamp erweitere, dann funkioniert die Ausgabe. Du hast schon Recht, man weiss halt nicht was für Nebeneffekte das Ganze hat.

    Danke auch noch für deine Hilfestellung zu memory_limit erhöhen und debuggen, das hat mir alles sehr weitergeholfen.

    Liebe Grüsse

    Thomas

  • 1