Katalog Modul - Zeichenkette des Titels formatieren

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • david enke
    Contao-Nutzer
    • 26.06.2009
    • 96

    #1

    Katalog Modul - Zeichenkette des Titels formatieren

    Guten Tag zusammen,

    ersteinmal großes Lob für das hervorragende Katalog-Modul.
    Es lässt sich wirklich sehr vielseitig einsetzen, bishin zur Vereinfachung der Pflege im Backend.
    Prinzipiell nutze ich den Formatierungsstring in den Katalogeinstellungen sehr häufig, allerdings hätte ich gern gewusst, ob man den gespeicherten Wert einer Auswahl (Verknüpfung zweier Kataloge) angeben kann?
    der Versuch mit
    Code:
    {{select_field::title}}
    oder nur
    Code:
    {{select_field}}
    funktionierten leider nicht.

    Jemand eine Idee?
  • MacKP
    Contao-Yoda
    • 15.06.2009
    • 13315

    #2
    Hallo davod enke,
    bisher habe ich es noch nicht geschaft das so auszugeben.
    Wäre natürlich sehr gut das auch ausgeben zu können. Daher bin ich mit den Entwicklern der nächsten Version am Handeln, das sowas aufgenommen wird.
    Das Problem ist nur gerade, das thyon sagt sowas wäre schon drinn. Es aber irgendwie auch in der neusten source (noch alpha) noch nicht so klappen will *g*

    Also übe dich noch ein wenig in Geduld und dann wird auch dir dieser Wunsch erfüllt ;-)

    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."

    Kommentar

    • david enke
      Contao-Nutzer
      • 26.06.2009
      • 96

      #3
      super, kein problem.
      bei checkboxen scheint es ja schon zu funktionieren....

      dabei hätte ich auch gleich noch eine idee: ich hab mal einem katalog (projekte) per tags die tl_member (projektteam) auswählbar gemacht.
      läuft super, nur leider ist das titelfeld auf den nachnamen beschränkt.

      da wäre doch ein weiterer fprmatierungsstring echt praktisch, anstelle des titel-feldes!

      Kommentar

      • MacKP
        Contao-Yoda
        • 15.06.2009
        • 13315

        #4
        Hallo david,
        im Moment ist es auf jeden Fall möglich Tags anzeigen zu lassen, die mit einem select Element ausgewählt werden und in Taxonomie drinn sind.
        Es kann sein das es nicht möglich ist aus anderen Katalogen so etwas hinzubekommen wegen der Architektur von TL. Aber ich bleib mal am Ball.

        Dein nächste Wunsch wird so dann nun wirklich nicht so funktionieren, da ja nur der Nachname eingebunden ist und nicht die ganze Tabelle verfügbar ist...
        Ansonsten versuchs doch selber mal mit nem Ticket dazu: http://code.google.com/p/typolight-catalog/

        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."

        Kommentar

        • david enke
          Contao-Nutzer
          • 26.06.2009
          • 96

          #5
          dank dir,
          werd ich wohl machen.

          Kommentar

          • david enke
            Contao-Nutzer
            • 26.06.2009
            • 96

            #6
            Um euch eine Lösung nicht vorzuenthalten, hier ein (noch) inoffizieller minimal-eingriff, der es ermöglicht verknüpfte Kataloge/ Tabellen im Backend via Format-String anzuzeigen.

            Und zwar gibt man der function generateTitle in der Catalog.php des Catalog-Moduls auf Zeile 782:
            PHP-Code:
            private function generateTitle($strFormat, $values, $tableName, $row) 
            
            die ergänzende $row-Var, und darin dem switch:
            PHP-Code:
            case 'select':
                $replace = $fieldConf['options'][$row[$params[0]]];
                break; 
            
            Darüber, beim Aufruf der Methode durch die
            PHP-Code:
            public function renderField($row) 
            
            auf Zeile 777, kommt noch eine var dazu:
            PHP-Code:
            return $this->generateTitle($strFormat, $values, $tableName, $row); 
            
            Aufgerufen wird dann mit
            Code:
            {{fieldname::relatedValue}}
            nochmal die beiden geänderten Methoden in Gänze:
            PHP-Code:
            /**
             * Row Label
             */    
                
                public function renderField($row)
                {
                
                    if (!$row['pid'])
                    {
                        return 'ID:'.$row['id'];
                    }
            
                    if (isset($this->tableNames[$row['pid']]) && isset($this->strFormat[$row['pid']]))
                    {
                        $tableName = $this->tableNames[$row['pid']];
                        $strFormat = $this->strFormat[$row['pid']];
                    }
                    else
                    {
                        $objType = $this->Database->prepare("SELECT tableName, format FROM tl_catalog_types WHERE id=?")
                                ->limit(1)
                                ->execute($row['pid']);
                        
                        $tableName = $objType->tableName;
                        $strFormat = $objType->format;
                        $this->tableNames[$row['pid']] = $tableName;
                        $this->strFormat[$row['pid']] = $strFormat;
                    }
                    
                    $fields = $GLOBALS['TL_DCA'][$tableName]['list']['label']['fields'];
            
                    $values = array();
                    foreach($fields as $field)
                    {
                        $values[$field] = $this->formatTitle($row[$field], $GLOBALS['TL_DCA'][$tableName]['fields'][$field]);
                    }
            
                    if (!strlen($strFormat))
                    {
                        return implode(', ', $values);
                    }
                    else
                    {
                        return $this->generateTitle($strFormat, $values, $tableName, $row);
                    }
                }
            
            
                private function generateTitle($strFormat, $values, $tableName, $row)
                {
                    $fields = $GLOBALS['TL_DCA'][$tableName]['list']['label']['fields'];
                    preg_match_all('/{{([^}]+)}}/', $strFormat, $matches);
                    //$strFormat = '';
                    foreach ($matches[1] as $match)
                    {
                        $params = split('::', $match);
                        $fieldConf = $GLOBALS['TL_DCA'][$tableName]['fields'][$params[0]];
                        if ($fieldConf)
                        {    
                            $replace = $values[$params[0]];
                            if ($params[1])
                            {
                                switch ($fieldConf['eval']['catalog']['type'])
                                {
                                    case 'file':
                                            if ($fieldConf['eval']['catalog']['showImage'])
                                            { 
                                                $replace = $this->generateThumbnail($replace, $params[1], $fieldConf['label'][0]);
                                            }
                                            break;
            
                                    case 'checkbox':
                                            // only use image if checkbox == true
                                            $replace = ($replace ? $this->generateThumbnail($replace, $params[1], $fieldConf['label'][0]) : '');
                                            break;
            
                                    case 'select':
                                            $replace = $fieldConf['options'][$row[$params[0]]];
                                            break;
            
                                    default:;
            
                                }                    
                            }
                            $strFormat = str_replace('{{'.$match.'}}', $replace, $strFormat);
                        }
                    }
                    return $strFormat;
                } 
            

            Kommentar

            • xtra
              Maintainer
              • 02.07.2009
              • 2007

              #7
              OffTopic: Kann das bitte einer in den Katalogbereich schieben?

              OnTopic:
              Ich werde mir deine Aenderung bei Gelegenheit ansehen und ggf. in den neuen Katalog mit einbauen. Habe bitte jedoch Geduld und erstelle bei sowas auch bitte immer eifrig tickets auf der google code Homepage, gerne auch mit Patches wie von dir hier getan, dann geht es nicht verloren.

              Gruss
              Chris
              Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

              Kommentar

              Lädt...