Ergebnis 1 bis 22 von 22

Thema: Metamodels Select SQL Einschränkung mit Insert Tags

  1. #1
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard Metamodels Select SQL Einschränkung mit Insert Tags

    Hallo Leute,

    ich habe ein Metamodel erstellt, welches ein Select (Auswahlliste) Attribut beinhaltet.
    Dieses Select-Attrbut zeigt Daten (Kategorien) von einem anderen Metamodel an.

    Nun möchte ich gerne einige Einträge von der Auswahlliste per SQL (Feld bei den Attribut-Einstellungen) einschränken lassen, dafür bräuchte ich aber die ID oder Benutzernamen vom aktuell eingeloggten Benutzer in der SQL Einschränkung.
    Meine Idee war, einfach in das SQL Feld einen Inserttag als Einschränkung zu verwenden. (Siehe Bild)


    Leider scheinen aber Insert Tags im SQL Feld nicht zu greifen :-(

    Welche Möglichkeiten gäbe es noch um eine solche Filterung im Backend zu reaisieren?

    Ich möchte einfach gesagt manchen Benutzern nur gewisse Kategorien bei der Backend-Eingbe (Bei der Auswahlliste) zur Verfügung stellen.

    Contao Version: 3.3.4

    Danke für eure Hilfe.
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Flash (07.04.2015 um 13:54 Uhr)

  2. #2
    Alter Contao-Hase Avatar von haendersonfox
    Registriert seit
    22.05.2012.
    Beiträge
    1.032

    Standard

    im backend, oder!? lg.

  3. #3
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Ja genau im Backend.
    Habe meinen Beitrag nun etwas verständlicher geschrieben
    Geändert von Flash (07.04.2015 um 13:56 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    06.10.2014.
    Beiträge
    33

    Standard Metamodels Select SQL Einschränkung mit Insert Tags

    Hallo !

    Ich stehe vor dem selben Problem, hat da jemand eine Lösung ?!

    lg

  5. #5
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Schreib am besten gleich ein Ticket auf GitHub.
    Dann werden sich die Entwickler dazu sicher schneller melden.

    Liebe Grüße
    Matthais
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  6. #6
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Danke für den Hinweis, ich habe nun ein Ticket auf Github erstellt
    https://github.com/MetaModels/attrib...lect/issues/40

  7. #7
    Alter Contao-Hase Avatar von haendersonfox
    Registriert seit
    22.05.2012.
    Beiträge
    1.032

    Standard

    hallo flash. dein inserttag bezieht sich aber auf das frontend!? lg.

  8. #8
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Hallo!

    Ich habe jetzt erst gesehen dass die user inserttags nur im Frontend funktionieren.

    Ich habe mein Problem nun folgendermaßen gelößt.

    1.) Im metamodelsattribute_select habe ich in der Select.php eine Core-Funktionalität eingebaut, welche im übergebenen SQL Feld die Inserttags übersetzt.
    2.) Im Basis Controller habe ich bei der Funktion replaceInserttags ein neues Tag 'beuser' definiert, welches alle Daten vom Backend User zurückliefert.

    Ich habe versucht über einen Hook eigene Inserttags zu erstellen.
    Leider hat diese Anleitung http://de.contaowiki.org/Eigene_insert_tags_erstellen nicht funktioniert :-(

  9. #9
    Alter Contao-Hase Avatar von haendersonfox
    Registriert seit
    22.05.2012.
    Beiträge
    1.032

    Standard

    hallo flash,

    mit einem eigenen inserttag ist schon die bessere lösung…

    probier es noch mal… erstelle nachdem du deine extension angelegt hast,
    die autoload für deine extension. ganz unten in der BE-navigation…

    und vergiss das hier nicht:

    Code:
    class MyClass extends Backend
    an die profis in der runde: das müsste doch so funktionieren, mit dem inserttag, oder?

    wie kann man die FE und BE-klassen eigentlich kombinieren?

    Code:
    class MyClass extends Frontend AND Backend
    ???

    lg.

    alex

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    ähh... mal ´ne Frage zum Nachvollziehen, was Ziel der Übung sein soll...

    wenn Du was in der FE-Ausgabe einschränken willst, solltest Du das über eine Zuordnung zu einer Mitgliedergruppe machen und wenn im Backend über eine Benutzergruppe - aus den vorangegangenen Posings kann ich nur ein "Mischmasch" aus beidem erkennen => was soll wo und wann genau passieren?

  11. #11
    Alter Contao-Hase Avatar von haendersonfox
    Registriert seit
    22.05.2012.
    Beiträge
    1.032

    Standard

    hi zonky,

    ich denke mal, er verwechselte user mit member...

    lg...

    alex

  12. #12
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Hallo haendersonfox!

    Auch eine Vererbung vom Backend hat nichts geholfen :-(

    Auch diese Anleitung hat nichts geholfen, das Inserttag greift nicht mal im Frontend
    http://zedseries.blogspot.co.at/2011...-tags-for.html

  13. #13
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    neuer Versuch: was soll wo und wann genau passieren?

    ... dann werden Sie geholfen ;-)

  14. #14
    Alter Contao-Hase Avatar von haendersonfox
    Registriert seit
    22.05.2012.
    Beiträge
    1.032

    Standard

    also flash,

    noch mal langsam…

    du musst erstmal mindestes ein feld innerhalb deines MMs haben, in dem die user-ID deines BE-users gespeichert wird… richtig?

    dann müsstest du dir eine erweiterung zusammenschreiben, welche dann die id ausgeben kann…

    deine sql-abfrage lautet dann:

    feldDerMemberId = {{deinInserttag::id}}

    hast du das so?

    lg.

    alex

  15. #15
    Alter Contao-Hase Avatar von haendersonfox
    Registriert seit
    22.05.2012.
    Beiträge
    1.032

    Standard

    hi zonky,

    innerhalb des BE sollen nur selectwerte ausgegeben werden,
    welche auch vom jeweiligen BE-user im MM angelegt wurden…

    so habe ich das verstanden…

    lg.

  16. #16
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von haendersonfox Beitrag anzeigen
    so habe ich das verstanden…
    ... ich nicht ;-)

  17. #17
    Alter Contao-Hase Avatar von haendersonfox
    Registriert seit
    22.05.2012.
    Beiträge
    1.032

    Standard

    dann lassen wir uns überraschen, was flash schreibt ;o)

  18. #18
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Zitat Zitat von haendersonfox Beitrag anzeigen
    also flash,

    noch mal langsam…

    du musst erstmal mindestes ein feld innerhalb deines MMs haben, in dem die user-ID deines BE-users gespeichert wird… richtig?

    dann müsstest du dir eine erweiterung zusammenschreiben, welche dann die id ausgeben kann…

    deine sql-abfrage lautet dann:

    feldDerMemberId = {{deinInserttag::id}}

    hast du das so?

    lg.

    alex
    Genau so hab ich es gemacht und es funktioniert, leider nur wenn ich mein eigenes Inserttag in der Basis Controller Klasse selber lasse.

    Mit einem eigenen Hook funktioniert es leider nicht, mir kommt es so vor als würd er den Hook komplett ignorieren :-(
    Hab alles so gemacht wie es in den Anleitungen stand :-(

  19. #19
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Flash Beitrag anzeigen
    Genau so hab ich es gemacht und es funktioniert, leider nur wenn ich mein eigenes Inserttag in der Basis Controller Klasse selber lasse.

    Mit einem eigenen Hook funktioniert es leider nicht, mir kommt es so vor als würd er den Hook komplett ignorieren :-(
    Hab alles so gemacht wie es in den Anleitungen stand :-(
    Dann hat du einen Fehler bei der Verwendung des hooks. Ohne den code zu kennen, ist es nur raten, was genau das Problem ist.

  20. #20
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Men Fehler war, dass ich den Cache nicht neu aufgebaut hatte

  21. #21
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Da ich diese Funktion wieder mal gebraucht habe möchte ich kurz erläutern was ich gemacht habe:

    1.) Habe ich einen eigenen replaceInsertTags Hook erstellt, welcher mit alle Daten vom eingeloggten Backend User zurückgibt

    PHP-Code:
    class MyInsertTags extends Backend
    {
        public function 
    outputTagContent($strTag)
        {
            
    $elements explode('::'$strTag);

            
    // Replace the tag
            
    switch (strtolower($elements[0]))
            {
                case 
    'beuser':

                    if (
    TL_MODE != 'FE' || BE_USER_LOGGED_IN)
                    {
                        
    $this->import('BackendUser''User');
                        return 
    $this->User->$elements[1];
                    }

                    break;
            }

            return 
    false;
        }

    2.) Habe ich in der Datei \composer\vendor\metamodels\attribute_select\src\M etaModels\Attribute\Select\Select.php die Methode getAdditionalWhere verändert (Zeile 131)


    Somit greifen nun auch Insert-Tags beim MetaModel Attribut-Typ "Auswahl", im Feld SQL



    PHP-Code:
    protected function getAdditionalWhere()
        {
            
    $additionalWhere =  $this->get('select_where') ? html_entity_decode($this->get('select_where')) : false;
            return 
    ContaoController::getInstance()->replaceInsertTags($additionalWherefalse);
        } 
    Anscheinend wurde aber die Methode "replaceInsertTags" im Controller protected, daher musste ich diese zusätzlich noch public setzen.

    Hat jemand vielleicht einen Tipp, ob es noch eine andere (public) Methode gibt, welche mir die InserTags auflößt, ohne dass ich in den Controller greifen muss?

    Danke und lg
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Flash (01.06.2015 um 12:35 Uhr)

  22. #22
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Hab nun eine andere Methode gefunden:

    PHP-Code:
    use ContaoCommunityAlliance\Contao\Bindings\ContaoEvents;
    use 
    ContaoCommunityAlliance\Contao\Bindings\Events\Controller\ReplaceInsertTagsEvent
    PHP-Code:
    protected function getAdditionalWhere()
        {
            
    $strColNameWhere $this->get('select_where') ? html_entity_decode($this->get('select_where')) : false;
            
            
    $replaceEvent = new ReplaceInsertTagsEvent($strColNameWhere);
            
    $dispatcher   $this->getMetaModel()->getServiceContainer()->getEventDispatcher();
            
    $dispatcher->dispatch(ContaoEvents::CONTROLLER_REPLACE_INSERT_TAGS$replaceEvent);

            return 
    strip_tags($replaceEvent->getBuffer());
        } 
    Die Controller Klasse muss nun nicht mehr angegriffen werden.

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
  •