Ergebnis 1 bis 12 von 12

Thema: vorhandenes Modul erweitern - Fremdschlüsselfeldausgabe schlägt fehl

  1. #1
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    195

    Frage vorhandenes Modul erweitern - Fremdschlüsselfeldausgabe schlägt fehl

    Hallo TYPOlight-Entwickler,

    ich beschäftige mich schon seit längerer Zeit mit TYPOlight und habe auch schon ein paar eigene Module geschrieben, allerdings stehe ich bei diesem Modul seit Tagen auf dem Schlauch und würde mich freuen, wenn mir jemand einen Denkanstoß geben könnte:

    Ich habe die Tabelle calendar_events um Felder erweitert, unter anderem um ein Fremdschlüsselfeld.
    In dem Frontend-Template können alle Felder ausgegeben werden, allerdings erscheint für das Fremdschlüsselfeld ja nur der Schlüsselwert/Zahl.
    Das Template ist lediglich eine Erweiterung des event_list Templates.
    Erstelle ich in meinem Modul eine Klasse "BiEventList extends ModuleEventList", um dort wie gewohnt eine Select-Abfrage zu erstellen, erscheint immer eine SQL-Fehlermeldung "Uncaught exception Exception with message Query error..", ob in der Klasse nun Code hinterlegt ist oder nicht.

    Für einen Denkanstoß bedanke ich mich vielmals im Voraus!
    Herzliche Grüße,
    Petra

  2. #2
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.622
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Petra,

    Mit der ganzen Fehlermeldung können wir dir vielleicht mehr sagen
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  3. #3
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    195

    Standard

    Hallo Andreas,

    erst einmal vielen Dank für Deine Antwort. Ich habe die Fehlermeldung nicht für so wichtig gehalten, da ich wahrscheinlich schon einen falschen Ansatz gewählt habe, wie ich mir die Daten zu dem Fremdschlüssel im Template anzeigen lassen kann. Daher meine Frage nach einem Denkanstoß. Vielleicht noch einmal etwas übersichtlicher:

    - Modul erweitert die Tabelle "tl_calendar_events" um ein paar Felder
    - 1 Feld enthält einen Fremdschlüssel
    - neues Template beruht auf "event_list":
    PHP-Code:
    <?php print_r($this->team);?>
    <div class="event<?php echo $this->class?>">
     <tr>
      <td><?php echo $this->date?></td>
      <td><?php echo $this->veranstalter;?></td>
      <td><?php echo $this->title?></td>
      <td><?php echo $this->teamid1?>
    <?php 
    if($this->teamid2):?><br /><?php echo $this->teamid2;?><?php endif;?>
    <?php 
    if($this->teamid3):?><br /><?php echo $this->teamid3;?><?php endif;?>
    </td>
      <td><?php if($this->info):?><a href="<?php echo $this->info;?>" target="_blank"><?php echo $this->info?></a><?php endif;?></td>
     </tr>
    </div>
    - Zu dem neuen Template muss es eine Klasse für das Frontend geben, damit die weitere Datenbanktabelle (Team) für Fremdschlüssel ausgelesen werden kann, und hier hakt es bei mir:
    PHP-Code:
    class ModuleBiCalendar extends [B]Events (oder ModuleEventlist oder..?)[/B
    - muss in diese Klasse der Code aus ModuleEventlist kopiert werden plus mein Code zum Auslesen des Teams, wie ich das bisher in anderen Modulen gemacht habe:
    PHP-Code:
        protected function compile()
        {
            
    $objTeam = array();
            
    $objTeam $this->Database->execute("SELECT id, title, lastname, firstname FROM tl_biteam ORDER BY sorting")->fetchAllAssoc();

            
    $this->Template->team $objTeam;
        } 
    - füge ich den Code aus ModuleEventlist ein, erhalte ich - wie schon geschrieben- die SQL-Fehlermeldung:
    Code:
    Fatal error: Uncaught exception Exception with message Query error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 (SELECT id, protected, groups FROM tl_calendar WHERE id IN()) thrown in /srv/www/web71/html/kunden/bielefelder-institut/system/libraries/Database.php on line 533
    #0 /srv/www/web71/html/kunden/bielefelder-institut/system/libraries/Database.php(162): Database_Statement->execute()
    #1 /srv/www/web71/html/kunden/bielefelder-institut/system/modules/calendar/Events.php(73): Database->execute('SELECT id, prot...')
    #2 /srv/www/web71/html/kunden/bielefelder-institut/system/modules/calendarFreeEntry/ModuleBiCalendar.php(74): Events->sortOutProtected(Array)
    #3 /srv/www/web71/html/kunden/bielefelder-institut/system/modules/frontend/ContentModule.php(70): ModuleBiCalendar->generate()
    #4 /srv/www/web71/html/kunden/bielefelder-institut/system/libraries/Controller.php(363): ContentModule->generate()
    #5 /srv/www/web71/html/kunden/bielefelder-institut/system/modules/frontend/ModuleArticle.php(169): Controller->getContentElement('336')
    #6 /srv/www/web71/html/kunden/bielefelder-institut/system/modules/frontend/Module.php(126): ModuleArticle->compile()
    #7 /srv/www/web71/html/kunden/bielefelder-institut/system/modules/frontend/ModuleArticle.php(69): Module->generate()
    #8 /srv/www/web71/html/kunden/bielefelder-institut/system/libraries/Controller.php(296): ModuleArticle->generate(false)
    #9 /srv/www/web71/html/kunden/bielefelder-institut/system/libraries/Controller.php(183): Controller->getArticle('49', false, false, 'main')
    #10 /srv/www/web71/html/kunden/bielefelder-institut/system/modules/frontend/PageRegular.php(68): Controller->getFrontendModule('0', 'main')
    #11 /srv/www/web71/html/kunden/bielefelder-institut/index.php(188): PageRegular->generate(Object(DB_Mysql_Result))
    #12 /srv/www/web71/html/kunden/bielefelder-institut/index.php(292): Index->run()
    #13 {main}
    Ich freue mich wirklich über jede Anregung! Vielen Dank!

    Grüße, Petra

  4. #4
    Contao-Urgestein Avatar von FloB
    Registriert seit
    19.06.2009.
    Ort
    Sonnensystem
    Beiträge
    1.618

    Standard

    Laut Fehlermeldung landen keine IDs in der SQL-IN()-Funktion – der Query hat also eine leere Liste zur Bedingung. Das führt natürlich zu einem Parse Error.
    Ich hab mir den Code allerdings nicht angeschaut, also kann ich dir nicht sagen, wo der Fehler steckt.
    So long,
    FloB since Nov. 2007 +706P +115P and counting

  5. #5
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    195

    Standard

    Hallo FloB,

    vielen Dank für Deine Nachricht. Die SQL-Fehlermeldung resultiert ja nur von dem Klassen-Code von ModuleEventlist, das habe ich ja nicht selber geschrieben, sondern den Code in meine Klasse kopiert. Ich möchte lediglich das Template "event_list" um ein paar Datenbank-Felder zur Ausgabe erweitern. Das hat auch geklappt. Nur die SQL-Anweisung, um Daten für den Fremdschlüssel aus der Datenbank zu holen, kriege ich nicht untergebracht.

    Ist mein Ansatz denn falsch?

    Herzliche Grüße,
    Petra

  6. #6
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.622
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Petra,

    Ich vermute du hast für dein Modul die Palette der eventlist nicht kopiert, und deshalb auch keinen Kalender aus der Liste ausgewählt?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  7. #7
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    195

    Standard

    Hallo Andreas,

    was meinst Du genau damit? Ich habe tatsächlich die Palette der eventlist nicht kopiert. Bzgl. Palette habe ich nur folgenden Code im Modul:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] .= ",{bi_legend};veranstalter;teamid1,teamid2,teamid3;info"
    Aus welcher Datei soll ich das denn rauskopieren, aus dca/tl_calendar_events.php?

    Mir fehlt zur Zeit echt der Durchblick.

    Danke für Deine Hilfe!
    Petra

  8. #8
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Hi Petra,
    für die Frontendausgabe erweiterst du jedenfalls schon mal die falsche Klasse, du müsstest ModuleEventList erweitern. Darüber hinaus sag uns doch erstens mal bitte, wie dein Modulordner heißt und poste zweitens mal config und dca.


    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  9. #9
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    195

    Standard

    Hallo Antipitch,

    mit ModuleEventlist hatte ich es auch schon probiert, aber auch keine Ausgabe bekommen.

    Der Modulordner heißt "bi_calendar".

    config:
    PHP-Code:
    $GLOBALS['FE_MOD']['events']['bi_eventlist'] = 'ModuleBiCalendar'
    dca/tl_bicalendar.php:
    PHP-Code:
    class tl_calendareventsextension extends Backend
    {
        
    /**
         * Return all team members as array
         * @return array
         */
        
    public function getTeamElements()
        {
            
    $arrTeam = array();
            
    $objTeam $this->Database->execute("SELECT id, lastname, firstname FROM tl_biteam ORDER BY lastname");

            while(
    $objTeam->next()) {
                
    $arrTeam[$objTeam->id] = $objTeam->lastname ", " $objTeam->firstname;
            }

            return 
    $arrTeam;
        }
    }


    //Modify palette
    $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] .= ",{bi_legend};veranstalter;teamid1,teamid2,teamid3;info";

    //Add fields
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['veranstalter'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['veranstalter'],
        
    'inputType'               => 'text',
        
    'eval'                    => array('maxlength'=>255)
    );

    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['info'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['info'],
        
    'inputType'               => 'text',
        
    'eval'                    => array('maxlength'=>255)
    );

    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['teamid1'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['teamid1'],
        
    'inputType'               => 'select',
        
    'options_callback'        => array('tl_calendareventsextension''getTeamElements'),
        
    'eval'                    => array('includeBlankOption' => false,'mandatory'=>true)
    );

    ... 
    weitere Felder 
    Vielen Dank für Deine Hilfe!
    Petra

  10. #10
    Community-Moderator Avatar von schman
    Registriert seit
    19.06.2009.
    Ort
    Dornbirn
    Beiträge
    3.739
    User beschenken
    Wunschliste

    Standard

    ich kenn mich zwar nicht gut in der TL Entwicklung aus aber soviel ich weiß werden die Module alphabetisch abgearbeitet und du kannst dan nich die calendar erweiterung erweitern wenn deine bi_calendar heißt du müsstest es so bennenen das es nach c kommt.

    Falls es eine Falschaussage war sorry

  11. #11
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Moin,
    Schmans Annahme ist korrekt, der Ordner sollte also z.B. xtcalendar heißen.

    Desweiteren muss für das neue Frontend-Modul der Config Eintrag dafür sorgen, dass anstatt der originalen Eventliste die erweiterte genommen wird. Also z.B.
    PHP-Code:
    $GLOBALS['FE_MOD']['events']['eventlist'] = 'ModuleXtEventlist'
    Die Datei muss dann natürlich auch im Modulordner vorhanden sein und die darin enthaltene Klasse auch so heißen. D.h. der Inhalt einer ModuleXtEventlist.php im Ordner xtcalendar sollte ungefähr so aussehen:
    PHP-Code:
    class ModuleXtEventlist extends ModuleEventlist
    {
        public function 
    generate()
        {
            return 
    parent::generate();
        }

        public function 
    compile()
        {
            
    // Originalcode plus eigener
        
    }


    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  12. #12
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    195

    Daumen hoch

    Hallo Schman und Antipitch,

    vielen vielen Dank für Eure großartige Hilfe, jetzt habe ich es verstanden und es klappt endlich!

    Nochmals vielen Dank,
    herzliche Grüße, Petra

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Registrierung schlägt wg. Geburtsdatum fehl
    Von scooterfox im Forum Geschützte Bereiche/Mitglieder
    Antworten: 2
    Letzter Beitrag: 15.06.2010, 12:09
  2. Dateiupload schlägt ohne Fehlermeldung fehl
    Von detrix im Forum Bilder/Dateien
    Antworten: 0
    Letzter Beitrag: 16.04.2010, 16:11
  3. SMH installation schlägt fehl
    Von fs1003 im Forum Installation / Update
    Antworten: 9
    Letzter Beitrag: 14.04.2010, 20:13
  4. Login Beispielanwendung schlägt fehl
    Von neogrande im Forum Sonstiges zu Contao
    Antworten: 2
    Letzter Beitrag: 03.10.2009, 17:51
  5. mehrer CSS importieren schlägt fehl
    Von schman im Forum Layout / Templates / Holy Grail
    Antworten: 2
    Letzter Beitrag: 21.09.2009, 07:27

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •