Ergebnis 1 bis 15 von 15

Thema: Wieso kein BE-Filter für Feld vom Typ "Tags"?

  1. #1
    Contao-Fan Avatar von Hendriks
    Registriert seit
    28.08.2009.
    Ort
    Stuttgart
    Beiträge
    275

    Standard Wieso kein BE-Filter für Feld vom Typ "Tags"?

    Hallo allerseits,

    Wieso lässt sich im Catalog-Backend kein Filter für ein Feld vom Typ "Tags" setzen?

    Im Frontend kann ich doch daraus auch einen Filter bauen... Wieso dann nicht "einfach" auch im Backend?

    Ist das technisch nicht möglich, oder zu komplex von der Programmierung her, oder einfach nur ein weiterer (vielleicht bereits bestehender) Feature-Request von mir?

    In meinem Katalog habe ich z.B. ein Tags-Feld "Themen", welches alle Einträge kategorisiert / durch Mehrfachauswahl-Möglichkeit verschlagwortet. Diese Themen speisen dann auf einer Catalog-Listen-Seite einen Filter und dienen gleichzeitig auf der Catalog-Leser-Seite als entsprechende Meta-Keywords für Suchmaschinen.

    Und letzteres erreicht man ja derzeit z.B. auch "nur" mittels eines kleinen Hooks im catalog_full_xyz-Template:

    PHP-Code:

    $GLOBALS
    ['TL_KEYWORDS'] = $entry['data']['themen']['value']; 
    Und im Backend finde ich es einfach sau-schade (um nicht zu sagen blöd ; o ), dass man gerade nach dererlei "Themen" o.ä. nicht filtern kann, vor allem wenn man einen sehr grossen Katalog hat, dessen Einträge sich nun mal in erster Linie durch diese Art von "Tags" definieren / kategorisieren...!

    Beste Grüße

  2. #2
    Contao-Fan Avatar von Hendriks
    Registriert seit
    28.08.2009.
    Ort
    Stuttgart
    Beiträge
    275

    Standard

    Hallo Leute,

    war das eine blöde Frage? Bin ich der einzige, der das vermisst..?

    Viele Grüße.

  3. #3
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Blöd ist die Frage nicht. Wurde soweit ich weiß schon öfter hier gestellt. Dir antwortet nur keiner, weil ich einer der wenigen bin, die hier immer antworten ;-)

    Also: Soweit ich weiß ist das Technisch nicht einfach möglich im Contao Backend. Deswegen gibt es das noch nicht. Ich weiß gerade auch nicht auswendig ob es dazu auch ein Ticket gibt. Ich meine das wäre schon lange da (aber bisher gab es einfach immer wichtigeres...). Ich versuche den Catalog durch Bezahlte Arbeit zu unterstützen (also bei Aufträgen benötigte Dinge vom Entwickler fertig stellen zu lassen). Das klappt aber leider nicht immer und erst recht nicht in dem Geldlichen Umfang den ich gut finden würde ^^
    Eventuell kann das ja jemand über einen Auftrag finanzieren wenn es eh gebraucht wird?

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  4. #4
    Contao-Fan Avatar von Hendriks
    Registriert seit
    28.08.2009.
    Ort
    Stuttgart
    Beiträge
    275

    Standard

    Danke MacKP,

    ich verstehe. Im Moment würde ich das Feature nur für meine eigene Site (welche ich gerade komplett Catalog-basiert an's Laufen bringe..) ganz praktisch finden. Wobei es für die Katalog-Pflege jetzt auch nicht lebenswichtig ist, aber es wäre halt schon guuuut..

    Da meine eigene Akquise-Site aber im Moment noch nicht ganz fertig ist, so habe ich im Moment auch (noch) eine leichte Kunden-Flaute.. Daher ist mein eigenes Budget derzeit auch (noch) etwas begrenzt! Ansonsten wäre ich auch durchaus bereit hier mal was zu investieren!

    Und genau weil meine eigene Site derzeit (noch) in Überarbeitung steckt, veröffentliche ich (z.B. auch hier) noch(!) keine Links dahin.. Da bin ich eigen: Will das Ding nämlich erst fertig haben, bevor ich die Posaunen blase!

    PS: Ich habe mir vorgenommen, hier auch öfters mal zu antworten, und nicht immer nur "blöde" Fragen zu stellen! Doch natürlich kann ich auch nur auf Themen antworten, wenn ich mich selbst mit dem Thema beschäftige.. Und oft geht es hier halt auch um eher "oberflächliche" Effekte (JavaScript, etc.), und das ist nun mal nicht so meine Welt..

    In diesem Sinne: Let's keep on rollin...

    Schönen Sonntag Euch allen noch!
    Geändert von Hendriks (12.02.2012 um 16:15 Uhr)

  5. #5
    Contao-Nutzer
    Registriert seit
    24.11.2009.
    Ort
    Fläsch
    Beiträge
    248

    Daumen hoch catalog felder vom typ tags in backend-listen als filter verwenden

    Hallo zusammen

    Diese Woche hatte ich dieselbe Anforderung. Ich hab ein Katalog mit Schulen (cat_school). Jede Schule hat ein Kursangebot bestehend aus verschiedenen Kurstypen (cat_kurstypen). Kursangebot (bzw. Kurstypen ist ein Tags Feld). Da es viele Schulen gibt, wäre es für die Administration sehr hilfreich die Schulliste nach Kurstypen filtrieren zu können. Schlussendlich hab ich eine Lösung gefunden die in diesem Fall funktioniert. Ich hab es so allgemein und update-sicher wie möglich implementiert, somit sollte die Lösung auch wiederverwendbar sein. Über Verbesserungsvorschläge und Rückmeldungen jeder Art würde ich mich freuen.

    So genug geredet. Die Folgenden 6 Schritte führen zum Erfolg


    1. Die Lösung arbeitet stark mit DCA Anpassungen. Als erstes wird das gewünschte Feld als Filter definiert mit einem options_callback.
      PHP-Code:
      // cat_school.php ode dcaconfig.php
      $GLOBALS['TL_DCA']['cat_school']['fields']['kurstypen']['filter'] = true;
      $GLOBALS['TL_DCA']['cat_school']['fields']['kurstypen']['options_callback'] = array('cat_school''getFilterOptionsKurstyp');

      class 
      cat_school extends Backend{
          
          public function 
      getFilterOptionsKurstyp(DC_Table $table){
              
      $kurstypen = array();
              
      $dbKurstypen $this->Database->prepare("SELECT id, name FROM cat_kurstyp ORDER BY name ASC")->execute();
              
              if(
      $dbKurstypen->numRows){
                  
      $kurstypenAssoc $dbKurstypen->fetchAllAssoc();
                  foreach(
      $kurstypenAssoc as $i => $k){
                      
      $kurstypen[$k['id']] = $k['name'];
                  }
              }
              return 
      $kurstypen;
          }

    2. Tags Felder haben keinen inputType zugewiesen. Wir ändern das, indem wir ein neuen inputType tags einführen. Anhand dieses inputTyps wird später auch die DC_Table angepasst.
      PHP-Code:
      // cat_school.php ode dcaconfig.php
      // use inputType tags as trigger for special treatment (custom DC_Table code)
      $GLOBALS['TL_DCA']['cat_school']['fields']['kurstypen']['inputType'] = 'tags'
    3. contao speichert die Filter-Einstellungen im Session Objekt ab. Über die DCA Eigenschaft list.sorting.filter können wir einen eigenen Filter definieren
      PHP-Code:
      // cat_school.php ode dcaconfig.php
      $filter Session::getInstance()->get('filter');
      if(
      $filter['cat_school']['kurstypen']){
          
      $GLOBALS['TL_DCA']['cat_school']['list']['sorting']['filter'] = array(array(" FIND_IN_SET(?, kurstypen) "$filter['cat_school']['kurstypen']));

    4. Schritt 2 und 3 sollten nur ausgeführt werden, wenn wir uns in der Listenansicht befinden.
      PHP-Code:
      // cat_school.php ode dcaconfig.php
      if(Input::getInstance()->get('act') == false){
          
      // Code von schritt 2. und 3.

    5. Nun sind wir soweit, dass der Filter in der Filterbar in der Listenansicht des Katalogs cat_school angezeigt wird. Dazu werden über den options_callback die alle Optionen geladen, angezeigt werden nur diejenigen welche auch in einem Eintrag in der Liste vorkommen.
      ACHTUNG: Damit die Filterbar angezeigt wird muss mindestens ein "normales" anderes Feld im Katalog als Filter in der Backendlistenansicht aktiviert sein. Bei mir hab ich das Feld language als Filterbares Feld definiert. Weil der Adminstrator das dann aber nicht braucht, habe ich mit folgenden Code wieder ausgeblendet.

      PHP-Code:
      // cat_school.php ode dcaconfig.php
      // for any reason modifying panelLayout does not work. 
      // => define at least one catalog field (e.g. language) to be filterable, then the filter bar is generated automatically
      // if the field should not be displayed, hide it with
      $GLOBALS['TL_DCA']['cat_school']['fields']['language']['filter'] = false;
      //$panelLayout = $GLOBALS['TL_DCA']['cat_school']['list']['sorting']['panelLayout'];
      //$GLOBALS['TL_DCA']['cat_school']['list']['sorting']['panelLayout'] .= empty($panelLayout) ? 'filter,' : ',filter,'; 
    6. Obwohl der Filter angezeigt wird, wird er noch nicht funktionieren. Wie oben erwähnt muss der neue InputType tags noch in DC_Table implementiert werden. Dazu entweder die Anweisungen und den Code hier verwenden, oder die Patches aus dem Anhang verwenden.
      PHP-Code:
      /*
       * contao 2.10.4
       * 
       * custom code to add to DC_Table line ca. 4579
       
                     // helps to enable tags filter menu in backend list view of catlogs
                     // added by ukunz, 16. Feb 2012
                     else if ($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['inputType']['tags']){
                         $doptions = explode(",", $option);
                     }
                     // end added by ukunz


       * custom code to add to DC_Table line ca. 4455

                     // added by ukunz 16. Feb 2012
                     elseif($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['inputType']['tags']){
                      // do nothing, filtering tag fields is done with dcaconfig (sorting.filter) 
                     }
                     // end added by ukunz
                      * 
         ---------------------------------------------------------------------------------------
       * contao 2.11
       *
       * custom code to add to DC_Table line ca. 4568
       
                     // added by ukunz 16. Feb 2012
                     else if($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['inputType']['tags']){
                         // do nothing, filtering tag fields is done with dcaconfig (sorting.filter)                             
                     }
                     // end added by ukunz


       * custom code to add to DC_Table line ca. 4698
       
                     // added by ukunz, 16. Feb 2012
                     else if ($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['inputType']['tags']){
                         $doptions = explode(",", $option);
                     }
                     // end added by ukunz
       * */ 


    Bis zur Lösung wars ein relativ steiniger Weg, der Code war (mal wieder) die beste Dokumentation. Ich hoffe dem Einen odern Anderen hilfts weiter. Die Lösung ist getestet in contao 2.10.4 und 2.11. Für die Anpassungem in DC_Table.php habe ich zusätzlich die patches im Anhang, sowie die komplette cat_school.php.
    Angehängte Dateien Angehängte Dateien
    http://www.ideadapt.net - where ideas become code

  6. #6
    Contao-Nutzer
    Registriert seit
    24.11.2009.
    Ort
    Fläsch
    Beiträge
    248

    HTML catalog backend-listen filter mit feldern aus fremd (foreign) tabellen verwenden

    Ergänzend zur Erklärung unten möchte ich hier noch ausführen, wie man einen Filter einbauen kann, der Einträge anhand eines Wertes aus einer verknüpften Tabelle (foreign key) filtert. Dies ist relativ einfach möglich. Allerdings muss auch hier wieder in den Core Code eingegriffen werden. Dafür gibt es ebenfalls einen Patch im Anhang. Diese Anleitung bezieht sich auf contao 2.11.

    Zuerst zur Ausgangslage. Ich möchte im Katalog cat_school ein Filter verwenden, der mir Schulen in einem bestimmten Land anzeigt. Die Entitäten sind wie folgt verknüpft:
    Code:
        +--------------+
        |  cat_country |
        |--------------|
        |              <---+
        |              |   |
        |              |   |
        +--------------+   |
                           |
        +--------------+---+
        |  cat_place   |
        |--------------<---+
        |              |   |
        |              |   |
        +--------------+   |
                           |
        +--------------+   |
        |  cat_school  |   |
        |--------------|   |
        |              +---+
        |              |
        |              |
        +--------------+
    1. & 2. Schritt 1 und 2 können vom Prinzipt her von unten übernommen werden. Der Code für das Laden der Optionen im Filterdropdown (options_callback) ist jetzt wie folgt:
    PHP-Code:
    $GLOBALS['TL_DCA']['cat_school']['fields']['country']['filter'] = true;
    $GLOBALS['TL_DCA']['cat_school']['fields']['country']['options_callback'] = array('cat_school''getFilterOptionsCountry');
    $GLOBALS['TL_DCA']['cat_school']['fields']['country']['eval']['tl_class'] .= ' invisible'// hide field in entry edit mode
    class cat_school extends Backend{
        public function 
    getFilterOptionsCountry(DC_Table $table){
            
    $countries = array();
            
    $dbCountries $this->Database->prepare("SELECT id, name FROM cat_country ORDER BY name ASC")->execute();
            
            if(
    $dbCountries->numRows){
                
    $countriesAssoc $dbCountries->fetchAllAssoc();
                foreach(
    $countriesAssoc as $i => $k){
                    
    $countries[$k['id']] = $k['name'];
                }
            }
            return 
    $countries;
        }    

    Da wir im DCA das Feld country ansprechen, ist es nötig dieses im catalog im Backend als Feld anzulegen. Das Feld muss vom Typ tags sein, und sollte in diesem Falle country als Spaltenname haben. Da nicht erwünscht ist, dass das Feld im Bearbeiten Modus eines Eintrags sichtbar ist, kann man es mit einem kleinen Trick ausblenden (tl_class = invisible).

    3. In Schritt drei verwenden wir eine etwas anderes Filterkriterium. Der ganze Code für den angepassten Filter packen wieder in eine if, damit dieser nur in der Listenansicht ausgeführt wird.
    PHP-Code:
    if(Input::getInstance()->get('act') == false){
        
        
    $filter Session::getInstance()->get('filter');
        if(
    $filter['cat_school']['country']){
           
    $GLOBALS['TL_DCA']['cat_school']['list']['sorting']['filter'][] = array(" FIND_IN_SET(?, (SELECT DISTINCT(c.id) FROM cat_school s INNER JOIN cat_place p ON p.id = s.place INNER JOIN cat_country c ON c.id = p.country WHERE s.id = cat_school.id)) "$filter['cat_school']['country']);
        }
        
        
    // use inputType tags as trigger for special treatment (custom code)
        
    $GLOBALS['TL_DCA']['cat_school']['fields']['country']['inputType'] = 'tags';

    Die FIND_IN_SET Funktion ist nur erfüllt, wenn die Schule (cat_school.id) im Land des ausgewählten Filterlandes ($filter['cat_school']['country']) ist.

    4. Soweit so gut. Das Filterfeld wird erkannt und im Backen in der Filterbar angezeigt. Allerdings werden noch keine Optionen angezeigt, obwohl wir in unserem options_callback welche zurückgeben. Das liegt daran, wie DC_Table unseren Callback-Rückgabewert verwendet. Normalerweise werden in den Filterdropdowns ja nur Werte angezeigt, die in mindestens einem Katalogeintrag als Feldwert vorkommen. Da wir kein Feld country haben (wollen), wird es auch nie eine Übereinstimmung geben zwischen vorhandenen country Werten und den von uns zurückgegebenen country Werten. Hier müssen wir also den core leicht abändern, damit dieser einfach alle von uns retournierten countries nimmt und mit diesen arbeitet, ohne sie noch mit den Vorhandenen zu vergleichen. Ersetze dazu Zeile 4731 in DC_Table.php durch:
    PHP-Code:
    $options array_keys($options_callback); 
    Meiner Meinung nach wäre es eh besser in allen options_callbacks, ohne weitere Vergleiche, immer nur den Rückgabewert des Callbacks zu beachten. Schliesslich kann der ja entscheiden, was effektiv zu verwenden ist. Die vorhandenen Optionen die der Core verwenden würde, könnte man ja als Argument mitgeben. Dann kann der Callback entscheiden wie er mit denen umgehen will.


    Source Code und Patch im Anhang. Ich hoffe das hilft jemanden Weiter. Wie gesagt Feedback willkommen. Hattet ihr auch schon ähnliche Anforderungen, wie habt ihr das gelöst?
    Angehängte Dateien Angehängte Dateien
    Geändert von bubblez (20.02.2012 um 18:12 Uhr)
    http://www.ideadapt.net - where ideas become code

  7. #7
    Contao-Nutzer
    Registriert seit
    24.11.2009.
    Ort
    Fläsch
    Beiträge
    248

    HTML filter dropdowns durchsuchbar machen im backend

    Hab grad noch ne gute Neuigkeit die zum Thema passt. Möchte man, dass die select Felder in der Filterbar durchsuchbar sind (siehe neues contao Feature), kann auch das mit ein bischen Nachhilfe erreicht werden.

    1. In der DCA Datei cat_school.php folgende Zeilen einfügen:
    PHP-Code:
    if(TL_MODE == "BE"){
        
    $GLOBALS['TL_CSS'][] = 'custom/css/backend.css';
        
    $GLOBALS['TL_JAVASCRIPT'][] = "custom/js/backend.js";

    Die Pfade können angepasst werden und sind relativ zu TL_ROOT anzugeben. Wenn also deine css-Datei im tl_files Verzeichnis liegt einfach tl_files/backend.css angeben.

    2. Die backend.css mit folgendem Inhalt abfüllen:
    Code:
    .chzn-container {
        text-align: left;
    }
    
    .tl_subpanel strong {
        vertical-align: top;
    }
    
    #country_chzn .chzn-single{ /* foreach field you apply 'chosen' to, this time i only chosenized the country field */
    	height: 20px;
    }
    3. Die backend.js mit folgendem Inhalt abfüllen:
    Code:
    window.addEvent('domready', function() {
    	
    	// from http://stackoverflow.com/questions/3541822/getting-all-visible-elements-using-mootools
    	$extend(Selectors.Pseudo, {
    	    visible: function() {
    	        if (this.getStyle('visibility') != 'hidden' && this.isVisible() && this.isDisplayed()) {
    	            return this;
    	        }
    	    }
    	});
    
    	// mark select elements in filterbar as searchable
    	$$('select#country').addClass("tl_chosen");  // country must match the catalog field name of the field you want to make searchable in the filterbar
    	
    	// make marked selects searchable
    	if (Elements.chosen != undefined) {
    		$$('select.tl_chosen:visible').chosen(); // :visible allows to only get select elements that have not already been processed by the chosen script.
    	}
    
    });
    In unserem Fall wird das country-Dropdown durchsuchbar.

    Das wars schon. Natürlich hätte man beim css auch mit einem eigenen Backend-Theme arbeiten können. Für diese kleine Änderung lohnt sich der Aufwand allerdings nicht. Zumal es ja auch so update-sicher ist.
    Geändert von bubblez (25.02.2012 um 13:26 Uhr)
    http://www.ideadapt.net - where ideas become code

  8. #8
    Contao-Fan Avatar von jschma
    Registriert seit
    09.09.2010.
    Beiträge
    408

    Standard

    Zitat Zitat von bubblez Beitrag anzeigen
    Hallo zusammen

    Diese Woche hatte ich dieselbe Anforderung. Ich hab ein Katalog mit Schulen (cat_school). Jede Schule hat ein Kursangebot bestehend aus verschiedenen Kurstypen (cat_kurstypen). Kursangebot (bzw. Kurstypen ist ein Tags Feld). Da es viele Schulen gibt, wäre es für die Administration sehr hilfreich die Schulliste nach Kurstypen filtrieren zu können. Schlussendlich hab ich eine Lösung gefunden die in diesem Fall funktioniert. Ich hab es so allgemein und update-sicher wie möglich implementiert, somit sollte die Lösung auch wiederverwendbar sein. Über Verbesserungsvorschläge und Rückmeldungen jeder Art würde ich mich freuen.

    So genug geredet. Die Folgenden 6 Schritte führen zum Erfolg

    (...)
    Hi bubblez,

    erst einmal Danke das Du dir die Mühe gemacht hast um es hier zu posten. Sieht reichlich kompliziert aus, ich wollte es aber trotzdem mal versuchen... und bin gescheitert Ich schildere mal kurz mein Vorgehen bzw. Fakten

    Ich habe einen Katalog, der Katalog heißt 'diplomates', innerhalb des Katalogs gibt es ein Tags-Field (wird über Taxonomie eingeladen) mit dem Namen "diplomate_status". Ich würde gerne im Katalog (Backend) meine Einträge nach dem Status filtern...

    Die Änderungen wie von dir angegeben habe ich alle in der dcaconfig.php gemacht, ich poste hier mal meinen Code
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You cannot access this file directly!'); 

    /** 
     * Contao Open Source CMS 
     * Copyright (C) 2005-2011 Leo Feyer 
     * 
     * Formerly known as TYPOlight Open Source CMS. 
     * 
     * This program is free software: you can redistribute it and/or 
     * modify it under the terms of the GNU Lesser General Public 
     * License as published by the Free Software Foundation, either 
     * version 3 of the License, or (at your option) any later version. 
     *  
     * This program is distributed in the hope that it will be useful, 
     * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
     * Lesser General Public License for more details. 
     *  
     * You should have received a copy of the GNU Lesser General Public 
     * License along with this program. If not, please visit the Free 
     * Software Foundation website at <http://www.gnu.org/licenses/>. 
     * 
     * PHP version 5 
     * @copyright  Leo Feyer 2005-2011 
     * @author     Leo Feyer <http://www.contao.org> 
     * @package    Config 
     * @license    LGPL 
     * @filesource 
     */ 


    /** 
     * ------------------------------------------------------------------------- 
     * DATA CONTAINER SETTINGS 
     * ------------------------------------------------------------------------- 
     * 
     * If you want to modify a data container file, you do not have to edit it 
     * directly. You can save your changes in this configuration file instead. 
     * Thus, you can update or replace the original files without having to 
     * worry about your modifications. 
     *  
     * Usage example: 
     *  
     *   $GLOBALS['TL_DCA']['tl_article']['config']['doNotCopyRecords'] = true; 
     *  
     * This line would prevent articles from being duplicated when you duplicate 
     * a page in module site structure. 
     */ 

     // cat_school.php ode dcaconfig.php  
    $GLOBALS['TL_DCA']['diplomates']['fields']['diplomate_status']['filter'] = true;  
    $GLOBALS['TL_DCA']['diplomates']['fields']['diplomate_status']['options_callback'] = array('diplomates''getFilterOptionsdiplomate_status');  

    class 
    diplomates extends Backend{  
          
        public function 
    getFilterOptionsdiplomate_status(DC_Table $table){  
            
    $kurstypen = array();  
            
    $dbKurstypen $this->Database->prepare("SELECT id, name FROM diplomates ORDER BY name ASC")->execute();  
              
            if(
    $dbdiplomate_status->numRows){  
                
    $kurstypenAssoc $dbdiplomate_status->fetchAllAssoc();  
                foreach(
    $diplomate_statusAssoc as $i => $k){  
                    
    $diplomate_status[$k['id']] = $k['name'];  
                }  
            }  
            return 
    $diplomate_status;  
        }  
    }   

    // cat_school.php ode dcaconfig.php  
    $filter Session::getInstance()->get('filter');  
    if(
    $filter['diplomates']['diplomate_status']){  
        
    $GLOBALS['TL_DCA']['diplomates']['list']['sorting']['filter'] = array(array(" FIND_IN_SET(?, diplomate_status) "$filter['diplomates']['diplomate_status']));  
    }   

    // cat_school.php ode dcaconfig.php  
    // for any reason modifying panelLayout does not work.   
    // => define at least one catalog field (e.g. language) to be filterable, then the filter bar is generated automatically 
    // if the field should not be displayed, hide it with  
    $GLOBALS['TL_DCA']['diplomates']['titel']['language']['filter'] = false;  
    //$panelLayout = $GLOBALS['TL_DCA']['cat_school']['list']['sorting']['panelLayout'];  
    //$GLOBALS['TL_DCA']['cat_school']['list']['sorting']['panelLayout'] .= empty($panelLayout) ? 'filter,' : ',filter,';   
      
    ?>
    Naja wie du sicherlich/vermutlich sehen wirst, hab ich da wohl irgendwas falsch gemacht Im Backend bekomme ich nach diesen Änderungen die Fehlermeldung:
    Code:
    Fatal error: Cannot redeclare class diplomates in /kunden/277447_96450/gn2-hosting/1581/1582/contao/system/config/dcaconfig.php on line 68
    Hast Du eine Idee wo ich Fehler eingebaut habe? Weil so ganz durchgestiegen bin ich durch deinen Code nicht, da fehlen mir die Basics

    Danke für jeden Tipp und viele Grüße,
    jschma

  9. #9
    Contao-Nutzer
    Registriert seit
    24.11.2009.
    Ort
    Fläsch
    Beiträge
    248

    Standard

    die dcaconfig.php wird geladen nachdem alle anderen dca files aller module geladen wurden. wie es aussieht deklarierst du die class dimplomates schon in einer anderen datei. vielleicht in der module dca datei system/modules/deinmodul/dca/diplomates.php?
    http://www.ideadapt.net - where ideas become code

  10. #10
    Contao-Fan Avatar von jschma
    Registriert seit
    09.09.2010.
    Beiträge
    408

    Standard

    Zitat Zitat von bubblez Beitrag anzeigen
    die dcaconfig.php wird geladen nachdem alle anderen dca files aller module geladen wurden. wie es aussieht deklarierst du die class dimplomates schon in einer anderen datei. vielleicht in der module dca datei system/modules/deinmodul/dca/diplomates.php?
    Hi und danke für deine Antwort Außer der dcaconfig habe ich keine Datei angepasst bzw auch keine erstellt...evtl. liegt da das Problem?

    Ich habe bisher alles im Backend des Catalogs gemacht, die Möglichkeit alles zu filtern (laut deiner Anleitung) habe ich komplett in der dca-config eingetragen. Mehr nicht

  11. #11
    Contao-Nutzer
    Registriert seit
    24.11.2009.
    Ort
    Fläsch
    Beiträge
    248

    Standard

    dann kann es sein, dass contao die dcaconfig.php zweimal lädt. dass soll dich aber nicht weiter stören, du kannst mit einer einfacher if die klasse nur einmal definieren.

    PHP-Code:
    if(class_exists("diplomates") === false){ /*deine klasse*/ 
    http://www.ideadapt.net - where ideas become code

  12. #12
    Contao-Fan Avatar von jschma
    Registriert seit
    09.09.2010.
    Beiträge
    408

    Standard

    Zitat Zitat von bubblez Beitrag anzeigen
    dann kann es sein, dass contao die dcaconfig.php zweimal lädt. dass soll dich aber nicht weiter stören, du kannst mit einer einfacher if die klasse nur einmal definieren.

    PHP-Code:
    if(class_exists("diplomates") === false){ /*deine klasse*/ 
    OK super, dank dir. Werde ich antesten! Aber sonst habe ich es richtig verstanden, wie ich deinen Code angepasst habe mit dem Katalog bzw dem Feld? Das kann ich ja fst nicht glauben

  13. #13
    Contao-Fan Avatar von jschma
    Registriert seit
    09.09.2010.
    Beiträge
    408

    Standard

    Schade, funktioniert trotzdem nicht Wenn jemand anderes eine Idee/Tipp hat, dann nur her damit Komme hier leider nicht weiter.

    Kleines Update:
    Ich hatte bisher vergessen die Anpassungen in der dc_table.php zu machen, das hab ich jetzt nachgeholt. Der Fehler ist trotzdem noch da

    Füge ich die Abfrage (if(class_exists("diplomates") === false){) ein erhalte ich das hier:
    Code:
    Fatal error: Could not load class diplomates in /..../contao/system/functions.php on line 106
    #0 /..../contao/system/functions.php(106): __error(256, 'Could not load ...', '/kunden/277447_...', 106, Array)
    #1 /..../contao/system/config/dcaconfig.php(91): __autoload('Could not load ...', 256)
    #2 /..../contao/system/libraries/Controller.php(2595): include('/kunden/277447_...')
    #3 /..../contao/system/modules/backend/Backend.php(178): Controller->loadDataContainer('diplomates')
    #4 /..../contao/contao/main.php(101): Backend->getBackendModule('diplomates')
    #5 /..../contao/contao/main.php(286): Main->run('tl_catalog_fiel...')
    #6 {main}
    
    Notice: Undefined index: ORIG_PATH_INFO in /..../contao/system/libraries/Environment.php on line 139
    
    Notice: Undefined index: PATH_INFO in /..../contao/system/libraries/Environment.php on line 139
    
    Notice: Undefined index: ORIG_SCRIPT_NAME in /..../contao/system/libraries/Environment.php on line 139
    Ohne die Abfrage kommt wieder der Error von oben...
    Geändert von jschma (05.04.2012 um 15:35 Uhr)

  14. #14
    Contao-Fan Avatar von thepixture
    Registriert seit
    24.06.2009.
    Ort
    Dresden
    Beiträge
    536

    Standard

    Hallo Bubblez,

    ich hab jetzt ebenfalls versucht Deinen Code zu verwenden und erhalte jetzt die Fehlermeldung, wenn ich die Liste der Einträge aufrufen möchte.

    Fatal error: Cannot redeclare class sp_projects in /home/www/.../html/contao/system/config/dcaconfig.php on line 104
    Code sieht wie folgt aus
    PHP-Code:
        $GLOBALS['TL_DCA']['sp_projects']['fields']['project_category']['filter'] = true;
        
    $GLOBALS['TL_DCA']['sp_projects']['fields']['project_category']['options_callback'] = array('sp_projects''getFilterOptionsProjectCategory');

        class 
    sp_projects extends Backend{
            
            public function 
    getFilterOptionsProjectCategory(DC_Table $table){
                
    $project_category = array();
                
    $dbproject_category $this->Database->prepare("SELECT id, name FROM project_category ORDER BY name ASC")->execute();
                
                if(
    $dbproject_category->numRows){
                    
    $project_categoryAssoc $dbproject_category->fetchAllAssoc();
                    foreach(
    $project_categoryAssoc as $i => $k){
                        
    $project_category[$k['id']] = $k['name'];
                    }
                }
                return 
    $project_category;
            }
        }  

        if(
    Input::getInstance()->get('act') == false) {
            
    // use inputType tags as trigger for special treatment (custom DC_Table code)
            
    $GLOBALS['TL_DCA']['sp_projects']['fields']['project_category']['inputType'] = 'tags'
                
    $filter Session::getInstance()->get('filter');
        
            if(
    $filter['sp_projects']['project_category']){
                
    $GLOBALS['TL_DCA']['sp_projects']['list']['sorting']['filter'] = array(array(" FIND_IN_SET(?, project_category) "$filter['sp_projects']['project_category']));
            }
        } 
    Grüße
    thepixture

  15. #15
    Contao-Fan Avatar von thepixture
    Registriert seit
    24.06.2009.
    Ort
    Dresden
    Beiträge
    536

    Standard

    Zitat Zitat von bubblez Beitrag anzeigen
    dann kann es sein, dass contao die dcaconfig.php zweimal lädt. dass soll dich aber nicht weiter stören, du kannst mit einer einfacher if die klasse nur einmal definieren.

    PHP-Code:
    if(class_exists("diplomates") === false){ /*deine klasse*/ 
    Hat bei mir nichts gebracht. Da bekomme ich schon beim Aufruf der Katalogliste einen Fehler.
    Fatal error: Could not load class sp_projects in /home/www/.../html/contao/system/functions.php on line 104

    #0 [internal function]: __error(256, 'Could not load ...', '/home/www/...', 104, Array)
    #1 /home/www/.../html/contao/system/functions.php(104): trigger_error('Could not load ...', 256)
    #2 [internal function]: __autoload('sp_projects')
    #3 /home/www/.../html/contao/system/config/dcaconfig.php(90): class_exists('sp_projects')
    #4 /home/www/.../html/contao/system/libraries/Controller.php(2829): include('/home/www/...')
    #5 /home/www/.../html/contao/system/modules/backend/Backend.php(194): Controller->loadDataContainer('tl_catalog_type...')
    #6 /home/www/.../html/contao/contao/main.php(120): Backend->getBackendModule('catalog')
    #7 /home/www/.../html/contao/contao/main.php(230): Main->run()
    #8 {main}


    Notice: Undefined index: ORIG_PATH_INFO in /home/www/.../html/contao/system/libraries/Environment.php on line 138

    Notice: Undefined index: PATH_INFO in /home/www/.../html/contao/system/libraries/Environment.php on line 138

    Notice: Undefined index: ORIG_SCRIPT_NAME in /home/www/.../html/contao/system/libraries/Environment.php on line 138
    Hat sonst niemand eine Idee, woran es liegen könnte?
    Grüße
    thepixture

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
  •