Fortlaufende Nummer (nicht id) in einem catalog Feld?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • qfler
    Contao-Nutzer
    • 14.01.2010
    • 44

    #1

    Fortlaufende Nummer (nicht id) in einem catalog Feld?

    Hallo,

    ich suche nach einer Möglichkeit, wie ich ein catalog Feld vom Typ "Nummer" mit einemWert vorbelegen kann, der aus einer anderen Tabelle kommt.
    Hintergrund: es gibt eine Tabelle (unabhängig vom catalog), die fortlaufende Nummernkreise enthält. Sobald ein neuer catalog Eintrag erstellt wird, soll die Tabelle mit den Nummern um einen neuen Eintrag ergänzt werden, und die soeben ergänzte Nummer dann aus der Tabelle geholt werden und in das catalog Feld integriert werden.

    Ablauf:
    1. Tabelle "Nummer" vor dem hinzufügen eines neuen catalog Eintrages:

    1234567

    2. Jetzt wird im Backend ein neuer catalog Eintrag erstellt.
    3. Tabelle "Nummer" wird nun um einen neuen Eintrag ergänzt und enthält damit zwei Werte:

    1234567
    3456789

    4. Im catalog Eintrag wird der letzte Wert der Tabelle "Nummer" nun in das entsprechende Feld eingesetzt. Dieses hat nun den Wert "3456789".


    Ich habe es über eine simple DCA Konfiguration zum testen versucht, allerdings habe ich da das Problem, dass der Insert-Befehl mehrmals ausgeführt wird, da es an dieser Stelle ja keinen Hook gibt, den Befehl nur einmal auszuführen (die inserts in folgendem Code sind nur zum testen und stellen nicht die späteren tatsächlichen Werte da):

    dcaconfig.php
    Code:
    $objKAnr2 = $this->Database->prepare("INSERT INTO KANummer (datum) VALUES (".date('Y-m-d').")")
                                  ->execute();
    							  
    $objKAnr = $this->Database->prepare("SELECT * FROM KANummer ORDER BY id DESC")
                                  ->limit(1)
                                  ->executeUncached();
    
    $GLOBALS['TL_DCA']['KA']['fields']['anzeigennummer']['default'] = $objKZnr->id;
    Als nächstes hatte ich es über ein Modul versucht. Allerdings war mir hier auch nicht klar, welcher Hook der passende ist, da es ja für den catalog nur Frontend-Hooks gibt. Zudem kann ich in dem Modul dann ja nicht mehr automatisch ein catalog-Feld mit dem gewünschten Wert befüllen.

    Irgendwie stehe ich gerade auf dem Schlauch. Hat von euch jemand eine Idee oder einen Lösungsansatz?

    :-(
  • Tim G
    Contao-Urgestein
    • 13.02.2010
    • 2212

    #2
    Hi,
    ein eigener Catalog-Feldtyp.

    Obwohl ich den Weg über die dcaconfig nicht schlecht finde.
    Kannst du nicht vorher abfragen ob der Wert schon gesetzt ist, damit der Befehl nicht mehrmals ausgeführt wird.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

    Kommentar

    • qfler
      Contao-Nutzer
      • 14.01.2010
      • 44

      #3
      Hallo Tim,

      das mit dem eigenen Feldtypen hatte ich mir auch schon überlegt, aber in der Doku vom catalog konnte ich diesbezüglich leider nichts finden. Deshalb habe ich eine Lösung per DCA versucht. Wie würdest du denn prüfen ob der Wert schon gesetzt ist damit der SQL Befehl nur einmal ausgeführt wird? Ich habe es über den Default-Wert probiert, allerdings wird da der SQL Befehlt bei jedem Aufruf des Kataloges im Backend ca. 10 Mal ausgeführt.

      Code:
      if(!isset($GLOBALS['TL_DCA']['TEST']['fields']['Nummer']['default'])) {
      ...
      }
      Hast du da noch eine Idee?
      Danke!

      Kommentar

      • Tim G
        Contao-Urgestein
        • 13.02.2010
        • 2212

        #4
        Teste doch mit der SQL Abfrage.

        Hier dein Aufruf:

        PHP-Code:
        $myDate = date('Y-m-d');
        
        $objTest = $this->Database->execute("SELECT * FROM KANummer WHERE datum=$myDate");
        if(!$objTest->numRows) // wenn nichts zurückgegeben wird, existiert kein Feld 'datum' mit dem Wert auf $myDate
        {
        $objKAnr2 = $this->Database->prepare("INSERT INTO KANummer (datum) VALUES (".$myDate.")")
                                      ->execute();
                                      
        $objKAnr = $this->Database->prepare("SELECT * FROM KANummer ORDER BY id DESC")
                                      ->limit(1)
                                      ->executeUncached();
        
        $GLOBALS['TL_DCA']['KA']['fields']['anzeigennummer']['default'] = $objKZnr->id;
        } 
        
        Mal so in Blaue
        http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

        Kommentar

        • tognit
          Contao-Fan
          • 28.06.2009
          • 480

          #5
          Fortlaufende Nummerierung (mit Jahreszahl)

          Hallo zusammen,

          Wie kriegt man in ein Catalog-Feld, eine Fortlaufende Nummerierung (mit Jahreszahl) hin, die so wie unten aussehen sollte?

          Im 2012:
          12001
          12002

          Im 2013:
          13001
          13002

          Kommentar

          • MacKP
            Contao-Yoda
            • 15.06.2009
            • 13315

            #6
            Hallo tognit,
            wenn das so überschaubar ist, dann würde ich das doch per taxonomie lösen.
            Ansonsten eventuell besser mit einem eigenen Feldtyp den du dafür anlegst?

            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

            Lädt...