Ergebnis 1 bis 12 von 12

Thema: Modul Auflistung - Template verändern

  1. #1
    Contao-Nutzer
    Registriert seit
    21.08.2009.
    Beiträge
    165

    Standard Modul Auflistung - Template verändern

    Ich frage mit dem Modul Auflistung eine contaofremde, statische Tabelle ab.

    Eine Auflistung der Ergebnisse der Abfrage möchte ich gerne erst haben, wenn in das Formular ein Suchbegriff eigegeben wurde und dieser auch in den durchsuchbaren Feldern der Tabelle gefunden wurde. Also nicht zunächst eine automatische Auflistung aller Feldinhalte, sondern nur die Ergebnisse der Suche.

    Wer hat das Template list_default.xhtml schon einmal entsprechend abgewandelt oder könnte mir einen Tipp zum Einstieg geben?

    Peter

  2. #2
    Contao-Fan Avatar von dhe
    Registriert seit
    25.10.2010.
    Ort
    Esslingen a.N.
    Beiträge
    657

    Standard

    Damit ich das richtig verstehe:
    Du willst die Ergebnisse erst darstellen, wenn zuvor über ein Formular ein Wert eingetragen wurde?
    Dann frag doch einfach im Template das Feld ab, ob es leer ist.
    Zum Beispiel:
    PHP-Code:
    <?php
    if($this->Input->get('feldname') != '') :
    // Dein Code und HTML Gerüst
    endif; ?>

  3. #3
    Contao-Nutzer
    Registriert seit
    21.08.2009.
    Beiträge
    165

    Standard

    Hallo dhe,

    ja, Du verstehst das richtig. Aber mangels php-Kenntnissen kann ich mit Deinem Lösungsansatz noch nicht richtig etwas anfangen.
    Das Template hat folgenden Code:
    PHP-Code:
    <div class="<?php echo $this->class?> ce_table listing block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
    <?php if ($this->headline): ?>

    <<?php echo $this->hl?>><?php echo $this->headline?></<?php echo $this->hl?>>
    <?php endif; ?>
    <?php 
    if ($this->searchable): ?>

    <div class="list_search">
    <form action="<?php echo $this->action?>" method="get">
    <div class="formbody">
    <input type="hidden" name="order_by" value="<?php echo $this->order_by?>" />
    <input type="hidden" name="sort" value="<?php echo $this->sort?>" />
    <input type="hidden" name="per_page" value="<?php echo $this->per_page?>" />
    <label for="ctrl_search" class="invisible"><?php echo $this->fields_label?></label>
    <select name="search" id="ctrl_search" class="select">
    <?php echo $this->search_fields?>
    </select>
    <label for="ctrl_for" class="invisible"><?php echo $this->keywords_label?></label>
    <input type="text" name="for" id="ctrl_for" class="text" value="<?php echo $this->for?>" />
    <input type="submit" class="submit" value="<?php echo $this->search_label?>" />
    </div>
    </form>
    </div>
    <?php endif; ?>
    <?php 
    if ($this->per_page): ?>

    <div class="list_per_page">
    <form action="<?php echo $this->action?>" method="get">
    <div class="formbody">
    <input type="hidden" name="order_by" value="<?php echo $this->order_by?>" />
    <input type="hidden" name="sort" value="<?php echo $this->sort?>" />
    <input type="hidden" name="search" value="<?php echo $this->search?>" />
    <input type="hidden" name="for" value="<?php echo $this->for?>" />
    <label for="ctrl_per_page" class="invisible"><?php echo $this->per_page_label?></label>
    <select name="per_page" id="ctrl_per_page" class="select">
      <option value="10"<?php if ($this->per_page == 10): ?> selected="selected"<?php endif; ?>>10</option>
      <option value="20"<?php if ($this->per_page == 20): ?> selected="selected"<?php endif; ?>>20</option>
      <option value="30"<?php if ($this->per_page == 30): ?> selected="selected"<?php endif; ?>>30</option>
      <option value="50"<?php if ($this->per_page == 50): ?> selected="selected"<?php endif; ?>>50</option>
      <option value="100"<?php if ($this->per_page == 100): ?> selected="selected"<?php endif; ?>>100</option>
      <option value="250"<?php if ($this->per_page == 250): ?> selected="selected"<?php endif; ?>>250</option>
      <option value="500"<?php if ($this->per_page == 500): ?> selected="selected"<?php endif; ?>>500</option> 
    </select>
    <input type="submit" class="submit" value="<?php echo $this->per_page_label?>" />
    </div>
    </form>
    </div>
    <?php endif; ?>

    <table class="all_records">
    <thead>
      <tr>
    <?php foreach ($this->thead as $col): ?>
        <th class="head<?php echo $col['class']; ?>"><a href="<?php echo $col['href']; ?>" title="<?php echo $col['title']; ?>"><?php echo $col['link']; ?></a></th>
    <?php endforeach; ?>
    <?php 
    if ($this->details): ?>
        <th class="head col_last">[nbsp]</th>
    <?php endif; ?>
      </tr>
    </thead>
    <tbody>
    <?php foreach ($this->tbody as $class=>$row): ?>
      <tr class="<?php echo $class?>">
    <?php foreach ($row as $col): ?>
        <td class="body <?php echo $col['class']; ?>"><?php echo $col['content']; ?></td>
    <?php endforeach; ?>
    <?php 
    if ($this->details): ?>
        <td class="body <?php echo $this->col_last?> col_last"><a href="<?php echo $col['url']; ?>"><img src="<?php echo TL_FILES_URL?>system/modules/listing/html/details.gif" alt="" /></a></td>
    <?php endif; ?>
      </tr>
    <?php endforeach; ?>
    </tbody>
    </table>
    <?php echo $this->pagination?>

    </div>
    Ich vermute, ich müsste Deinen Code-Schnipsel dann vor table class = all records einfügen. Aber wie geht es dann weiter?

    Sorry, mit html und css komme ich mittlerweile gut zurecht, aber noch nicht mit php.

  4. #4
    Contao-Fan Avatar von dhe
    Registriert seit
    25.10.2010.
    Ort
    Esslingen a.N.
    Beiträge
    657

    Standard

    Hm, bevor ich hier die Stelle sage, würde ich gern erstmal wissen, wie dein SQL Statement aussieht und wie du deine Formulardaten verarbeitest.

  5. #5
    Contao-Nutzer
    Registriert seit
    21.08.2009.
    Beiträge
    165

    Standard

    Beides, SQL-Statement und Verarbeitung der Formulardaten, wird vom Modul Auflistung (listing) vorgenommen.

    Folgender html-Code wird erzeugt:

    HTML-Code:
    <div class="mod_listing ce_table listing block">
    
    <div class="list_search">
    <form action="xyz.html" method="get">
    <div class="formbody">
    <input type="hidden" name="order_by" value="" />
    <input type="hidden" name="sort" value="" />
    <input type="hidden" name="per_page" value="30" />
    <label for="ctrl_search" class="invisible">Vorhandene Felder</label>
    <select name="search" id="ctrl_search" class="select">
      <option value="Nachname">Nachname</option>
      <option value="Ort">Ort</option>
      <option value="Kreis">Kreis</option>
    </select>
    <label for="ctrl_for" class="invisible">Suchbegriffe</label>
    <input type="text" name="for" id="ctrl_for" class="text" value="" />
    <input type="submit" class="submit" value="Suchen" />
    </div>
    </form>
    </div>
    
    <div class="list_per_page">
    <form action="xyz.html" method="get">
    <div class="formbody">
    <input type="hidden" name="order_by" value="" />
    <input type="hidden" name="sort" value="" />
    <input type="hidden" name="search" value="" />
    <input type="hidden" name="for" value="" />
    <label for="ctrl_per_page" class="invisible">Ergebnisse pro Seite</label>
    <select name="per_page" id="ctrl_per_page" class="select">
      <option value="10">10</option>
      <option value="20">20</option>
      <option value="30" selected="selected">30</option>
      <option value="50">50</option>
      <option value="100">100</option>
      <option value="250">250</option>
      <option value="500">500</option> 
    </select>
    <input type="submit" class="submit" value="Ergebnisse pro Seite" />
    </div>
    </form>
    </div>
    Danach werden die ausgelesenen Daten in Tabellenform, einschließlich einer Seite für Details, ausgegeben.
    Ist es das, was Du benötigst?

  6. #6
    Contao-Fan Avatar von dhe
    Registriert seit
    25.10.2010.
    Ort
    Esslingen a.N.
    Beiträge
    657

    Standard

    Ne, ich würde eigentlich hauptsächlich wissen, inwieweit deine Formulareingabe eine Rolle spielt?
    Wird die Eingabe im SQL Statement eingebaut oder willst du einfach nur die Tabelle anzeigen lassen, wenn das Formular gesendet wurde?
    Dann versteh ich den Sinn nicht ganz.

    Also die Abhängigkeit von Formulareingabe und Datenbankabfrage.

  7. #7
    Contao-Nutzer
    Registriert seit
    21.08.2009.
    Beiträge
    165

    Standard

    Das Modul "Auflistung", welches ja zum Core von Contao gehört, erzeugt ein Formular zur Abfrage einer Tabelle. Ohne Änderung des Moduls bzw. des Templates wird in einem zweiten Schritt auch der gesamte Inhalt der Tabelle (nur die dazu definierten Felder) als Tabelle unterhalb des Formulars dargestellt. Bei einer großen Tabelle werden daher zwangsläufig mehrere Seiten erzeugt, was ich vermeiden will. Gibt man nun das Suchwort in das Formular ein, wird nur der Teil der Tabelle dargestellt, der das Suchwort enthält. Das Formular hat also lediglich eine Filterfunktion, die leider erst genutzt werden kann, nachdem der gesamte Tabelleninhalt schon dargestellt wurde.

    Ich möchte daher weiterhin die Darstellung des Formulars, ich welches z. B. der gesuchte Name, oder der Ort, oder der Kreis eigegeben werden kann. Aber erst wenn der Formularinhalt abgesendet wurde, möchte ich die Darstellung der Suchergebnisse als Tabelle unterhalb des Formulars haben.

    Ist das jetzt klarer formuliert?

  8. #8
    Contao-Fan Avatar von dhe
    Registriert seit
    25.10.2010.
    Ort
    Esslingen a.N.
    Beiträge
    657

    Standard

    Jupp.
    Zuerst musst du den submit Buttons im list_default template (das du ja bestimmt in deinen templates Ordner kopiert hast) was hinzufügen:
    PHP-Code:
    <input type="submit" name="submit" class="submit" value="<?php echo $this->search_label?>" />
    <input type="submit" name="submit" class="submit" value="<?php echo $this->per_page_label?>" />
    Dann um die Ausgabetabelle eine if Abfrage
    PHP-Code:
    <?php if($this->Input->get('submit')): ?>
    <table class="all_records">
    ....
    <?php echo $this->pagination;
    endif;
    ?>
    Das müsste es schon sein

  9. #9
    Contao-Nutzer
    Registriert seit
    21.08.2009.
    Beiträge
    165

    Standard

    Hallo dhe,

    es klappt wie doll

    Danke für die hervorragende Hilfe und einen schönen Tag weiterhin!

    Peter

  10. #10
    Gesperrt
    Registriert seit
    07.05.2011.
    Beiträge
    1.199

    Standard

    Ja, soweit klar, schöne Anleitung. Was ich bloß bereits an der ursprünglichen Fragestellung nicht verstand: Das Modul auflisting bringt doch die Filterung mittels Suchbegriff per Eingabefeld bereits von Haus aus mit. Verwende ich u. a. auch für eine selbstgestrickte Stellenbörse, weil die entsprechende Contao-Extension in meiner Installation nicht nachvollziehbare Bugs zeigte.

    Für derartige Anwendungen ausreichend und funktioniert. Allerdings halt mit nur einem Suchbegriff und könnte deshalb besser sein. Will ich bspw. nur Bäcker oder Maurer in der Liste ausgeben lassen, geht das. Expressions wie "Bäcker Maurer" bzw. "Bäcker&Maurer", "Bäcker|Maurer", "Mau*" etc. bringen allerdings garkeine Ausgabe, werden also nur als String verarbeitet.

    Falls also mit der Anfrage gemeint war, auch Suchmuster zu verarbeiten und nicht nur Single-Strings, warum dann ein extra Formularfeld dafür, wo es das doch schon gibt und eher dessen Verarbeitung zu erweitern wäre? Oder hab ich grad ein Brett vorm Kopf, das Leben kann ja schön hart sein?

  11. #11
    Contao-Nutzer
    Registriert seit
    21.08.2009.
    Beiträge
    165

    Standard

    Ja, das Leben ist ab und zu ganz schön hart

    Das Modul "Auflistung" zeigt eben nicht nur das Formular zur Eingabe des Suchworts, sondern auch gleichzeitig den ganzen Tabelleninhalt, so wie im BE definiert.

    Ich wollte jedoch, dass zunächst nur das Formular ausgegeben wird. Erst nach Eingabe des Suchworts sollte dann die Tabelle mit den Ergebnissen dargestellt werden.
    Bei der Auflistung großer Tabellen ist es eben störend, wenn zunächst 1000 Datensätze angezeigt werden, obwohl der Filter mit dem Suchwort eigentlich nur 10 Datensätze erzeugt (nur ein Beispiel).

    Mit einer Veränderung des Suchmusters hatte meine Ausgangsfrage nichts zu tun.

  12. #12
    Gesperrt
    Registriert seit
    07.05.2011.
    Beiträge
    1.199

    Standard

    Alles klar, jetzt hab ichs geblickt. Und die erste Listenausgabe mit CSS ausblenden, wäre bei vielen Datensätzen natürlich Blödsinn bzw. was suchen zu lassen, das garnicht ausgegeben werden soll. Obwohl 1000 Datensätze in lediglich einer Tabelle eigentlich nur Sekundenbruchteile dauern dürften. Aber man weiß bei einer Webseite ja nie sicher, wie es sich unter Last verhält.

    Kann ich bestimmt auch mal brauchen und hab mir den Thread gebookmarkt.

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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