Ergebnis 1 bis 14 von 14

Thema: include PHP: unique ID mehrfach vorhanden [solved]

  1. #1
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard include PHP: unique ID mehrfach vorhanden [solved]

    Hallo zusammen,
    folgendes Szenario:

    Ich hab 2x PHP-Files (im Template Ordner), welche beide jeweils 3x in einem Artikel via {{file::*}} eingebunden werden. Diese PHP-Files generieren unter anderem eine eindeutige ID. Nun ist es aber so, dass bei der Seite im Frontend dann 6 ID's generiert wurden, wobei 3 ID's je von einem PHP-File gleich sind.

    Sprich:

    {{file::file1.php}} generiert 'abc123'
    {{file::file1.php}} generiert 'abc123'
    {{file::file1.php}} generiert 'abc123'
    {{file::file2.php}} generiert 'def456'
    {{file::file2.php}} generiert 'def456'
    {{file::file2.php}} generiert 'def456'

    Die ID's werden mit
    Code:
    md5(uniqid(mt_rand(), true))
    generiert.
    Ich hab keinen Zugriff auf die ID der Inhaltselemente ($this->id) und weiß nicht, wie ich sonst zu einer eindeutigen ID komm. Werden dafür benötigt um ein JS-Plugin zu initialisieren.
    Geändert von Sabaid (01.08.2017 um 06:46 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Siehe http://php.net/manual/en/function.uniqid.php

    Warning

    This function does not guarantee uniqueness of return value. Since most systems adjust system clock by NTP or like, system time is changed constantly. Therefore, it is possible that this function does not return unique ID for the process/thread. Use more_entropy to increase likelihood of uniqueness.
    Erkläre lieber mal genau warum du das brauchst.

  3. #3
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Erkläre lieber mal genau warum du das brauchst.
    Wie gesagt, um ein JS-Plugin zu initialisieren. Ich hab 6 Tabs mit je einem Suchfeld und darunterliegende Einträge. Die Suchfelder sollen natürlich nicht untereinander verknüpft sein, daher benötige ich jeweils eine eigene ID für das Input-Feld und den Container unterhalb.

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Ja, aber wie bindest du das alles ein? Einfach nur mit {{file::file1.php}}?

  5. #5
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja, aber wie bindest du das alles ein? Einfach nur mit {{file::file1.php}}?
    Ich habe folgenden Artikelaufbau:

    Code:
    Tab-Start
     - {{file::file1.php}}: Open Wrapper
     - Boxes4ward Inhaltsbox
     - HTML: Close Wrapper
    Tab-Trennelement
     - ...
    Tab-Trennelement
     - ...
    Tab-Trennelement
     - {{file::file2.php}}: Open Wrapper
     - Boxes4ward Inhaltsbox
     - HTML: Close Wrapper
    Tab-Trennelement
     - ...
    Tab-Trennelement
     - ...
    Tab-Ende
    Die PHP-Files sind der öffnende Wrapper für eine Liste an Elementen, die via Inhaltsbox dann geladen werden. Am Schluss folgt dann das schließende Element. In den PHP-Files wird ein Suchfeld platziert. Ich benötige eine eindeutige ID, damit beim Initialisieren des JS-Plugins (Metafizzy Isotope: Filtern via Suchfeld) das jeweilige Suchfeld nur die umschließenden Elemente der Inhaltsbox filtert und nicht alle. Das Initialisieren des Plugins passiert in den jeweiligen PHP-Files und benötigt den Selektor für das Suchfeld und den Container, welche jeweils im PHP-File generiert werden.

    EDIT: Da ich das {{file::file1.php}} öfters brauch, hab ich es in ein Modul gepackt.

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Du könntest dir ja auch einfach über $GLOBALS einen Counter mitzählen lassen.

  7. #7
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du könntest dir ja auch einfach über $GLOBALS einen Counter mitzählen lassen.
    Kann ich einfach so das $GLOBALS Array erweitern?
    Gibt es da irgendwelche Richtlinien bzw. Vorgaben?

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Das $GOBALS Arrays ist einer der globalen Array von PHP mit denen du machen kannst was du willst. Natürlich kannst du da auch einiges kaputt machen, da dieses Array auch von Contao viel benutzt wird . Aber es spricht ansonsten nichts dagegen.
    Geändert von Spooky (31.07.2017 um 15:38 Uhr)

  9. #9
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, das $GOBALS Array ist einer der globalen Array von PHP mit denen du machen kannst was du willst. Natürlich kannst du da auch einiges kaputt machen, da dieses Array auch von Contao viel benutzt wird .
    Verstehe, vielen Dank!
    Ich hab das nun probehalber mal so gemacht:

    PHP-Code:
    if(!isset($GLOBALS['isotope_id']))
        
    $GLOBALS['isotope_id'] = 0;

    $uniqueID $GLOBALS['isotope_id']++;

    echo 
    "ID: " $uniqueID
    Generiert wird:

    {{file::file1.php}} -> ID: 0
    {{file::file1.php}} -> ID: 0
    {{file::file1.php}} -> ID: 0
    {{file::file2.php}} -> ID: 1
    {{file::file2.php}} -> ID: 1
    {{file::file2.php}} -> ID: 1

  10. #10
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Evtl.

    Code:
    {{file::file1.php|uncached}}
    Siehe: https://docs.contao.org/books/manual...nserttag-flags
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  11. #11
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Evtl.

    Code:
    {{file::file1.php|uncached}}
    Siehe: https://docs.contao.org/books/manual...nserttag-flags
    Danke für den Tipp, leider selbes Ergebnis.

  12. #12
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard

    Mit
    Code:
    {{file::file1.php|refresh}}
    hat es funktioniert. Bin mir aber noch nicht ganz sicher, warum er die Files cached und dabei die $GLOBALS ignoriert.

    {{file::file1.php}} -> ID: 0
    {{file::file1.php}} -> ID: 1
    {{file::file1.php}} -> ID: 2
    {{file::file2.php}} -> ID: 3
    {{file::file2.php}} -> ID: 4
    {{file::file2.php}} -> ID: 5

    Heißt das nun, dass für Seiten, in denen ich die PHP-Files verwende, kein Cache verwendet wird, oder nur für die inkludierten Parts?

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Interessant, ich wusste gar nicht dass Contao den Output der Insert Tags zwischen speichert. Macht aber natürlich Sinn.

    Ich glaube in Contao 3 sind {{file Insert Tags immer uncached. Das heißt wenn die Seite aus dem Cache kommt, wird das trotzdem ausgeführt.
    Geändert von Spooky (01.08.2017 um 07:24 Uhr)

  14. #14
    Contao-Nutzer
    Registriert seit
    24.02.2016.
    Beiträge
    183

    Standard

    Verstehe, vielen Dank!

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
  •