Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 43

Thema: Genau ein Item pro Mitglied

  1. #1
    Contao-Nutzer
    Registriert seit
    26.07.2009.
    Beiträge
    64

    Standard Genau ein Item pro Mitglied

    Hallo Community,

    irgendwie komm ich grad nicht klar...

    Für eine Sportveranstaltung möchte ich die Registrierung mittels Catalog in folgenden Schritten abbilden:
    1. Kontaktperson eines Teams meldet sich an (Member).
    2. In einem geschützten Bereich erhält dieses Mitglied dann auf das Team-Registrierungs-Formular (1. Catalog).
    3. Über ein weiteres Formular kann das Mitglied seine Spieler registrieren (2. Catalog).


    Die Zuordnung der Catalog-Items (Liste) mache ich beim Team per userid={{user::id}}, das klappt auch wunderbar. Stelle ich mir bei den Spielern auch so vor.

    Zwei Probleme habe ich gerade:
    Die Übergabe der User-ID über ein verstecktes Feld im Formular klappt nicht ({{user::id}}). Obigen Test mit der Liste habe ich durch Zuordnung im Backend gemacht.

    Über Katalog-Bearbeiten lege ich immer neue Teams an - pro Mitglied soll aber nur ein Team möglich sein. Kann man das irgendwie regeln?

    Nachtrag: eventuell brauche ich noch 'catalogitemuseridfield', aber das ist nicht auffindbar über den Erweiterungskatalog (Contao 2.11).

    Freue mich auf eure Beiträge!
    Geändert von olivgruen (27.04.2012 um 23:24 Uhr)

  2. #2
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    catalogitemuseridfield kann ich dir dafür empfehlen. Ist wahrscheinlich in den Einstellungen noch gesperrt, da nicht kompatibel zu 2.11?

    Du kannst ein Memberfield 'Team' anlegen als Select, welches auf deine Tabelle 'Teams' zugreift, damit kannst du dann ja immer nur ein Team einem Mitglied zuordnen.

    Evtl. habe ich dich da falsch verstanden und du möchtest dem TC im FE die Möglichkeit geben ein einziges Team anzulegen. Dann gib ihm doch einfach nur einen Datensatz, den er dann immer wieder bearbeiten kann, dort könnte er dann z.B. auch seine Spieler eintragen. Das Team-Feld muss dann unique sein.

    Dass ein Member im FE weiter Member registrieren können soll gefällt mir irgendwie nicht.

    Evtl. habe ich dich auch falsch verstanden und du möchtest nur dem TC die Möglichkeit geben Spieler in eine Tabelle einzutragen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  3. #3
    Contao-Urgestein Avatar von jan.theofel
    Registriert seit
    23.06.2009.
    Ort
    Berlin
    Beiträge
    1.846

    Standard

    Hi,

    für ein einfacheres Editieren könnte für dich auch die Erweiterung catalogeditsingleown hilfreich sein. Dann musst du der Edit-Seite nicht die ID bzw. den Alias des eigenen Datensatzes mitgeben sondern baust einfach ein Zuordnungsmodul vor den Reader ein und jeder User bekommt seinen eigenen Datensatz zum Editieren vorgesetzt.


    Jan
    Jan Theofel
    Barcamp-Moderator für Corporate-Barcamps und öffentliche Barcamps

  4. #4
    Contao-Nutzer
    Registriert seit
    26.07.2009.
    Beiträge
    64

    Standard

    Danke für die Anregungen!

    @Andreas: Zwischen der Registrierung der Kontaktperson und des Team bzw der Spieler soll es keine manuellen Zuordnungen durch einen Admin o.ä. geben. Die zum Team gehörigen Spieler sollen keine Member sein, sondern ein zweiter Catalog, da einige zusätzliche Daten pro Person erfasst werden müssen.

    @Jan: Dafür brauche ich aber auch catalogitemuseridfield, oder?

    Kann es grad noch nicht ausprobieren, aber werde dann wohl am besten auf 2.10 downgraden und weiterbasteln.

  5. #5
    Contao-Nutzer
    Registriert seit
    26.07.2009.
    Beiträge
    64

    Standard

    Zitat Zitat von jan.theofel Beitrag anzeigen
    Hi,

    für ein einfacheres Editieren könnte für dich auch die Erweiterung catalogeditsingleown hilfreich sein. Dann musst du der Edit-Seite nicht die ID bzw. den Alias des eigenen Datensatzes mitgeben sondern baust einfach ein Zuordnungsmodul vor den Reader ein und jeder User bekommt seinen eigenen Datensatz zum Editieren vorgesetzt.

    Jan
    Hallo Jan,

    habe die Erweiterung installiert. Bei den Modulen habe ich jedoch nix neues zur Auswahl. Wie funktioniert die Erweiterung?

  6. #6
    Contao-Urgestein Avatar von jan.theofel
    Registriert seit
    23.06.2009.
    Ort
    Berlin
    Beiträge
    1.846

    Standard

    Hi,

    ganz unten in der Modulliste sollte ein neuer Typ "Einen eigenen Katalogeintrag wählen" auftauchen. Dort kannst du dann eine Tabelle auswählen und ein Feld eingeben, das die UserID enthält. (Und ja, daher ergänzt diese Extension catalogitemuseridfield um die Auswahl.) Dann baust du eine Seite mit erst diesem Modul und dann dem Bearbeitenmodul (oder auch mit einem Reader). Jeder User bekommt dann genau seinen Datensatz angezeigt.

    Jan
    Jan Theofel
    Barcamp-Moderator für Corporate-Barcamps und öffentliche Barcamps

  7. #7
    Contao-Nutzer
    Registriert seit
    26.07.2009.
    Beiträge
    64

    Standard

    Funktioniert leider nicht, hab kein neues Modul zur Auswahl. Könnte das an "Nicht erprobt für Conto 2.10.4" liegen?

    Die Abfrage per Bedingung funktioniert allerdings auch.

    Wenn mir jetzt noch jemand verraten könnte, wie ich es auf maximal einen Catalog-Eintrag pro User beschränke bin ich glücklich

  8. #8
    Contao-Urgestein Avatar von jan.theofel
    Registriert seit
    23.06.2009.
    Ort
    Berlin
    Beiträge
    1.846

    Standard

    Hi,

    Zitat Zitat von olivgruen Beitrag anzeigen
    Funktioniert leider nicht, hab kein neues Modul zur Auswahl. Könnte das an "Nicht erprobt für Conto 2.10.4" liegen?
    Hmm, ich habe das für 2.11 entwickelt, aber ich wüsste kaum einen Grund, warum es unter 2.10 nicht laufen sollte. Welche Catalog-Version hast du denn im Einsatz: Aus dem ER oder aus dem SVN?

    Zitat Zitat von olivgruen Beitrag anzeigen
    Wenn mir jetzt noch jemand verraten könnte, wie ich es auf maximal einen Catalog-Eintrag pro User beschränke bin ich glücklich
    So wirklich einschränken kannst du das aus meiner Sicht nicht. Zumindest kannst du bei dem Feld nicht sagen, dass es "eindeutig" sein muss, was das bewirken würde. Nimm auf jedem Fall aus dem Edit-Template mal den "Speichern und neu" Button raus. Das übersieht man leicht, dass Benutzer dort sonst neue Einträge anlegen können. Wenn du das raus hast, hat der Benutzer ja mit dem Modul, dass er nur seins editieren kann, keine Chance ein leeres Edit-Formular zu bekommen.

    Jan
    Jan Theofel
    Barcamp-Moderator für Corporate-Barcamps und öffentliche Barcamps

  9. #9
    Contao-Nutzer
    Registriert seit
    26.07.2009.
    Beiträge
    64

    Standard

    Zitat Zitat von jan.theofel Beitrag anzeigen
    Welche Catalog-Version hast du denn im Einsatz: Aus dem ER oder aus dem SVN?
    Aus dem ER. Wüsste gar nicht, wie ich an die SVN-Version komme

    Zitat Zitat von jan.theofel Beitrag anzeigen
    Nimm auf jedem Fall aus dem Edit-Template mal den "Speichern und neu" Button raus. Das übersieht man leicht, dass Benutzer dort sonst neue Einträge anlegen können. Wenn du das raus hast, hat der Benutzer ja mit dem Modul, dass er nur seins editieren kann, keine Chance ein leeres Edit-Formular zu bekommen.
    Das hilft an der Stelle nix, oder ich habe da noch einen Denkfehler. Aktuell habe ich eine Liste, in der die (oder eigentlich nur DAS EINE team) steht. Von da aus kann es der User bearbeiten. Darüber gibt's aber noch ein Link 'Add New Item', der steht dummerweise auch nicht im List-Template, sondern irgendwo anders. Den kann ich nicht einfach auf 'Display=off' stellen, da sonst der User auch kein einzelnes Team anlegen kann.

    Ich habe es jetzt so gelöst, dass der User ein Link zu einem Formular erhält, wenn er noch kein Team angelegt hat und ansonsten hat er die Liste mit dem Bearbeiten-Button und ausgeblendetem 'AddNewItem'.

  10. #10
    tornado
    Gast

    Standard Erweiterungen > catalogeditsingleown

    hi jan,

    ich habe diese Erweiterung installiert und habe auch kein neues Modul zur Auswahl.
    Dann nachgeschaut in Modul Dateien und entdeckt so was:
    TL_ROOT/system/modules/catalogeditsingleown/catalogeditsingleown/catalogEditSingleOwn.php 1578 2012-04-05 15:10

    Ein Unterverzeichnis gelöscht, Datenbank aktualisiert und in der Modulliste ist ein neuer
    Typ "Einen eigenen Katalogeintrag wählen" aufgetaucht.

    Gruß

    josef

  11. #11
    Contao-Nutzer
    Registriert seit
    26.07.2009.
    Beiträge
    64

    Standard

    Hallo Josef,

    das habe ich gleich mal probiert, allerdings hab ich mir dann irgendwie das Frontend zerschossen und die Erweiterung wieder rausgenommen.

    Bei dir lief dann alles glatt bei der Verwendung des Moduls?

    Grüße,
    Kerstin

  12. #12
    Contao-Nutzer
    Registriert seit
    01.09.2009.
    Beiträge
    47

    Standard

    Hallo Jan,

    wir haben Deine Erweiterung "catalogeditsingleown" in unser Projekt integriert, genau das was wir gebraucht und gesucht haben, vielen Dank von unserer Seite!
    Damit können wir nur direkt switchen vom (in unserem Fall) Foto-Upload eines Mitglied direkt zur Bearbeitung (löschen) des Fotos.
    D.h., das Mitglied lädt ein Foto hoch und nach "Speichern" wird ihm direkt das hochgeladene Foto - mit der Option es wieder zu löschen - angezeigt.

    Das ganze hat nur leider einen kleinen Pferdefuss: Da ganze funktioniert so nur im "Google Chrome", nicht jedoch im IE (9) und nicht im Firefox (13).
    Wir haben überlegt, dass die Browser vielleicht unterschiedliche Ladeverläufe haben, daher das Modul zu "catalogeditsingleown" aus der Position direkt vor dem "edit-Modul" rausgenommen und in den header gesetzt. Hat jedoch keinen Einfluss.

    Im Quelltext der "edit" - Seite haben wir gesehen, dass beim Chrome das Formular nach "Speichern" im action-feld die Parameter "item" und "alias" überträgt, dass passiert jedoch nicht beim IE und Firefox.

    Catalog: aktuell aus dem SVN
    Contao: 2.11.3

    Wir rätzeln und rätzeln und kommen nicht drauf.
    Hast Du vielleicht eine Idee, woran das liegen könnte?
    Oder sind eventuell identische Effekte aufgetreten?

    Danke und Gruß
    Allan
    Geändert von Allan (02.07.2012 um 13:58 Uhr)

  13. #13
    Contao-Nutzer
    Registriert seit
    01.09.2009.
    Beiträge
    47

    Standard Ergänzung

    Ich muss den letzten Post etwas klarer rücken:

    Unabhängig der Erweiterung "catalogeditsingleown" baut das Edit-Formular nach absenden die Ziel-Url im IE und Firefox nicht vollständig auf.
    Bei Chrome geht es ??!!

    D.h. im IE und Firefox heisst die Ziel-URL: domain.de/de/profilfoto.html
    Im Chrome heist sie: domain.de/de/profilfoto/item/alias.html

    Das ist völlig dubios, hat jemand dazu vielleicht ein Idee?

    Gruß
    Allan

  14. #14
    Contao-Nutzer
    Registriert seit
    01.09.2009.
    Beiträge
    47

    Standard

    Hat sich erledigt!

    IE und Firefox mögen keine
    HTML-Code:
    <input type="image">
    Wir habe das jetzt über
    HTML-Code:
    <button type="submit"><img src="" /></button>
    gelöst.

    Frohes Schaffen
    Allan

  15. #15
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Frage

    Hi!

    Kann mir jemand kurz und bündig erklären, wie ich einen Eintrag genau an ein Mitglied binde? Also mit welchen Extensions ich welche Module wie einsetzen muss, damit ein Mitglied auf einer bestimmten Seite immer nur seinen ihm zugewiesenen Katalogeintrag bearbeiten kann.

    Über eure Antworten wäre ich sehr dankbar!

    Beste Grüße
    Alex
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  16. #16
    Contao-Nutzer
    Registriert seit
    01.09.2009.
    Beiträge
    47

    Standard

    Hallo Alexander,

    im Prinzip geht es nur um die Zuweisung der ausgelesenen Datensätze und die weist Du mit
    PHP-Code:
    userid={{user::id}} 
    zu, wobei "userid" für den Tabellennamen des "useridfield" steht.
    Das "useridfield" erhältst du nach Installation der Erweiterung "catalogitemuseridfield".

    Wie Du dann Deine Anforderungen aufbaust steht beispielhaft in diesem Tutorial: http://de.contaowiki.org/Catalog_mit...flow_erstellen
    sehr verständlich beschrieben.

    Gruß
    Allan
    Geändert von Allan (12.07.2012 um 08:40 Uhr)

  17. #17
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Frage

    Hi Allan,

    vielen Dank für deine Antwort!
    Wo filter ich denn aber nach der userid? Ich habe einen FE-User in einer Testumgebung angelegt, dazu einen Katalog mit einem Eintrag. Bei diesem Eintrag habe ich ein Testfeld gemacht (Textfeld) und ein userid-Feld, wobei ich beim einzigen Eintrag in diesem Katalog den angelegten User ausgewählt habe. Soweit so richtig oder?
    Nun habe ich eine Seite eingerichtet, die ich einfach "Bearbeitung" genannt habe. Darin habe ich dann "Katalog bearbeiten"-Modul eingebunden, in dessen Einstellungen ich den Katalog ausgesucht habe und alle zwei erstellten Felder zur Bearbeitung freigegeben habe.
    Logge ich mich nun als dieser FE-User ein und rufe die Seite auf, kann ich leider nichts sehen. Irgendwo muss ich nun ja noch filtern; nur wo?

    Über weitere Tipps wäre ich echt dankbar!

    Beste Grüße
    Alexander
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  18. #18
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ist in dem Ausgabe-Modul kein Feld 'Bedingung', wo du userid={{user::id}} eintragen kannst?
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  19. #19
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Standard

    Hi Andreas,

    danke für deine Antwort.
    Leider gibt es beim Modul kein entsprechendes Feld, das habe ich auch zuerst gesucht. Modulname ist "Katalog-Bearbeitung".

    Versionen:
    Contao: 2.10.4
    Catalog: Aus dem ER

    Beste Grße
    Alex
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  20. #20
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ah, ok. Die Bedingung kann man in der Liste eingeben, mit der man die Bearbeitung ansteuert.

    Damit dann auf der edit Seite keine Einträge erraten werden können muss man im catalog_edit_xxx Template das Feld userid des Datensatzes empfangen (ich hoffe das geht). Schau mal mit print_r($GLOBALS) oder was sich da anbietet und suche in der Ausgabe nach userid.

    Sperren der Bearbeitung ist ja dann einfach.
    PHP-Code:
    if($feldMitUserId !== $this->replaceInsertTags('{{user::id}}'))
    {
      echo 
    'no edit allowed';
      return;

    Evtl. kommt man auch noch ohne replaceInsertTags an die User-ID, evtl. mit $this->User->id, weiß ich jetzt nicht auswendig.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  21. #21
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Standard

    Hi Andreas,

    danke für deine späte Antwort! :-)
    Also ich habe nun <?php echo '<pre>' . print_r($GLOBALS) . '</pre>'; ?> in die catalog_edit.html5 eingegeben, bekomme aber leider nix zurück. Ich habe das Gefühl, dass beim FE-Aufruf das Modul erst gar nicht verarbeitet wird, obwohl aber folgendes im Quelltext steht:
    HTML-Code:
    <section class="mod_catalogedit block">
    <p class="info"></p>
    
    <p class="back"><a href="index.php/seite.html" title="Zurück">Zurück</a></p>
    
    </section>
    Nun bekomme ich auch durch print_r nichts zurück. Wo muss ich dann die Bearbeitung sperren? Gleich im Template? Leider bin ich nicht firm genug, um das Ganze gleich richtig einzuarbeiten. Und wie filter ich im Template dann? Auf Grundlage des leider ausgebliebenen print_r Ergebnisses, richtig?

    Beste Grüße & einen angenehmen Sonntag
    Alex
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  22. #22
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das ist nicht das original Template, aber erstmal egal.

    Hast das fast richtig gemacht, aber print_r() ist ein Ausgabebefehl, so wie echo, gibt also nicht die Variable zurück. Wenn du das willst, musst du print_r($meineVar, true) benutzen. Meistens benutzen wir das aber so
    PHP-Code:
    // Meist so
    echo '<pre>';
    print_r($GLOBALS);
    echo 
    '</pre>';

    // So müsste es allerdings auch gehen
    echo '<pre>' print_r($GLOBALStrue) . '</pre>'
    Du kannst dir die Ausgabe auch im Quelltext ansehen, dann brauchst du kein <pre>.

    Filtern tust du dann wie ich vorher gezeigt habe mit der IF-Anweisung. Das return stoppt das Template an dieser Stelle.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  23. #23
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Standard

    Hi Andreas,

    vielen Dank für deine nächtliche Reaktion!:-)
    Also folgendes Template habe ich daraus dann erstellt:
    Code:
    <?php echo $this->rteConfig; ?>
     
    <form action="<?php echo $this->action; ?>" id="<?php echo $this->formId; ?>" method="post" enctype="<?php echo $this->enctype; ?>">
    <div class="formbody">
    <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId; ?>">
    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
    <table cellspacing="0" cellpadding="0" summary="Table holds form input fields">
    <?php echo $this->field; ?>
      <tr class="<?php echo $this->rowLast; ?>">
        <td class="col_0 col_first">[nbsp]</td>
        <td class="col_1 col_last">
          <div class="submit_container">
    <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['save']); ?>">
    <input type="submit" name="saveNclose" id="saveNclose" class="tl_submit" accesskey="c" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['saveNclose']); ?>">
    <input type="submit" name="saveNcreate" id="saveNcreate" class="tl_submit" accesskey="n" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['saveNcreate']); ?>">
          </div>
        </td>
      </tr>
    </table>
    </div>
    </form>
    
    
    <?php echo '<pre>';
    print_r($GLOBALS);
    echo '</pre>'; 
    ?>
    Allerdings gibt mir das FE nichts aus auf der Seite. Es entsteht nach wie vor nur der oben erwähnte Code. Binde ich es nach wie vor falsch ein? :-)

    Beste Grüß
    Alexander
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  24. #24
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Nein, ist richtig. Suche mal im FE im Quelltext nach dem pre, wenn du das nicht findest, wird das Template nicht ausgegeben. $GLOBALS ist in PHP immer vorhanden, unabhängig von Contao.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  25. #25
    Contao-Nutzer
    Registriert seit
    01.09.2009.
    Beiträge
    47

    Standard

    @Alexander: Problem schon gelöst?

    Gruß
    Allan

  26. #26
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard

    Also ich habe mit catalogeditsingleown nie gearbeitet, hatte mir damals alles selbst zusammgebastelt damit der User nur seine Katalogitems sieht und bearbeiten kann.
    Ich habe das Modul "Katalog-Liste" die habe ich im User Account Bereich zur Verfügung gestellt.
    Das Modul hat folgende Konfig:

    Weiterleitung > Katalog-Reader Seite
    Sichtbare Felder > BenutzerID [xyz:useridfield]
    Bearbeitung aktivieren > aktiv
    Sprung zur Seite > Katalog-Edit Seite
    Katalog-Layout > catalog_eigeneliste

    das Template "catalog_eigeneliste" ist eine Kopie der catalog_simpletable und bekam von mir folgende modifikation:

    In Zeile 1 folgendes:
    PHP-Code:
    <?php $this->import('FrontendUser''User');
    $user $this->User->id;
    ?>
    Ab Zeile ca. 14 den kompletten tbody (bis ca.33) Inhalt ersetzt mit :
    PHP-Code:
    <tbody class="body<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
    <?php foreach ($this->entries as $entry): ?>
    <?php 
    if ($entry['data']['paten_benutzerid']['raw'] == $user): ?>
    <tr class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
    <?php foreach ($entry['data'] as $field=>$data): ?>
    <?php 
    if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
        <td class="field <?php echo $field?>"><?php if (strlen($data['value'])): ?>
        <?php echo $data['value']; ?>
    <?php 
    endif; ?>
    </td>
    <?php endif; ?>
    <?php 
    endforeach; ?>
    <?php 
    if ($entry['showLink'] && $entry['link']):  ?>
    <td class="link"><div class="link"><?php echo $entry['link']; ?></div></td>
    <?php endif; ?>
    <?php 
    if ($entry['linkEdit']): ?>
    <td class="edit"><div class="linkEdit"><?php echo $entry['linkEdit']; ?></div></td>
    <?php endif; ?>
    </tr>
    <?php endif; ?>
    <?php 
    endforeach; ?>
    </tbody>
    Im Prinzip einfach nur eine Abfrage dazwischen gesetzt die den User rausfiltert.

  27. #27
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, das kannst du machen, aber die Liste bietet ja schon die Möglichkeit eine Bedingung anzugeben. Dann kannst du dir das im Template sparen, da die entries, welche die Bedingung nicht erfüllen dort erst gar nicht ankommen.

    Ich würde das edit auch über eine Liste ansteuern, die halt nur die entries zeigt, die auch bearbeitet werden dürfen. Bleibt aber immer noch das Problem, dass das edit Modul auch andere entries bearbeiten würde, wenn nur der entsprechende Datensatz über die URL mit dem GET-Parameter angesteuert wird. D.h. der GET in der URL kann leicht manipuliert werden.

    Ich hatte das gestern so gelöst, dass ich bei der Listenausgabe die erlaubten entries (die ID davon) in die Session geschrieben habe. In dem edit Template habe ich dann den GET-Parameter mit den erlaubten entries in der Session abgeglichen und ne Weiterleitung zurück auf die Liste gesetzt, wenn's nicht passt.

    In der Liste sah das so aus
    PHP-Code:
    // Set allowed items to session for a last safety check in edit modul
    // $arrAllowedItems natürlich vorher irgendwo mit den erlaubten IDs aufgebaut.
    if(count($arrAllowedItems) > 0)
    {
      
    $this->Session->set('arrAllowedItems'$arrAllowedItems);

    Im Template für das edit Modul dann das
    PHP-Code:
    // Parameter übergeben? Bearbeitung erlaubt?
    if(!$this->Input->get('items') || !in_array(intval($this->Input->get('items')), $this->Session->get('arrAllowedItems')))
    {
      require_once 
    'system/libraries/System.php';
      
    System::redirect('liste.html');

    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  28. #28
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard

    Hi Andreas, das stimmt die Bedingung ist ja extra dafür da... bitte frag mich auch nicht warum ich es ins Template gebaut hab, da war mal irgendwas vor längere Zeit... ein Problemchen.. ich weiss es nicht mehr ^^ aber normalerweise reicht die Bedingung ja aus.

    Das Problem der Manipulation habe ich nicht. Bei mir wird "sie haben keine Berechtigung" angezeigt weil ich im Katalog-Edit das Bearbeitbare Feld BenutzerID [xyz:useridfield]" aktiv hab
    Die Sicherheitsfunktion ist also schon irgendwie implementiert.


    EDIT: ach jetzt weiss ich was nie geklappt hat.
    FIND_IN_SET({{user::id}}, xyzbenutzerid) funktioniert in den Bedingungen nicht ebenso wenig wie {{user::id}}=xyzbenutzerid
    Die Bedingen ist ja ne SQL Abfrage und da gibts kein InserTag

    EDIT2: looooooool ich glaub ich hab Alzheimer..... jetzt weiss ich wie das Problem entstanden ist
    https://www.contao-community.de/show...er-Bedingungen
    Geändert von izanagi (16.07.2012 um 16:24 Uhr)

  29. #29
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, manchmal muss man es halt im Template machen, z.B. auch wenn du alle ausgeben willst, aber den Link zur Bearbeitung nur denen mit Berechtigung.

    Geht das inserttag nun im Bedingunsfeld? Ich denke ja. Ich habe mir da auch ne dynamische Bedingung rein geholt mit {{file::build_query.php}}. Ah, dann muss inserttag dort ja gehen.

    Ah, dann reicht also die Anwesenheit des userid fields im edit formular, dass du nur die eigenen bearbeiten kannst? Haste mal nen test gemacht? GET von nem verbotenen in die URL geschrieben?

    Ist bei mir wohl so, da ich noch kompliziertere Rechte habe - der zu bearbeitende Datensatz gehört dabei mehreren FE-Usern (Teamcaptains einer Spielgruppe - Ergebnismeldung - und die Teams der Gruppen variieren nat. von Saison zu Saison).
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  30. #30
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Ja, manchmal muss man es halt im Template machen, z.B. auch wenn du alle ausgeben willst, aber den Link zur Bearbeitung nur denen mit Berechtigung.

    Geht das inserttag nun im Bedingunsfeld? Ich denke ja. Ich habe mir da auch ne dynamische Bedingung rein geholt mit {{file::build_query.php}}. Ah, dann muss inserttag dort ja gehen.

    Ah, dann reicht also die Anwesenheit des userid fields im edit formular, dass du nur die eigenen bearbeiten kannst? Haste mal nen test gemacht? GET von nem verbotenen in die URL geschrieben?

    Ist bei mir wohl so, da ich noch kompliziertere Rechte habe - der zu bearbeitende Datensatz gehört dabei mehreren FE-Usern (Teamcaptains einer Spielgruppe - Ergebnismeldung - und die Teams der Gruppen variieren nat. von Saison zu Saison).
    Ich hatte mal einen ähnlichen Fall mit dem Auflistungs-Modul. Dort hat FIND_IN_SET partout nicht funktioniert mit einem Inserttag, aber mit IN.
    Also hier:
    xyzbenutzerid IN ({{user::id}})

    Ich hatte eine Kommaliste per POST geschickt und mit inputvars eingesetzt. Das hat funktioniert.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  31. #31
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard

    Ah, dann reicht also die Anwesenheit des userid fields im edit formular, dass du nur die eigenen bearbeiten kannst? Haste mal nen test gemacht? GET von nem verbotenen in die URL geschrieben?
    Also bei mir ja. Gewundert habe ich mich darüber auch. Es ist ja nichts anderes als ein Hidden Field im Formular mit der userid. Aber bei mir reicht es.
    Wenn ich den benutzernamen eines anderen als Parameter mitgebe ist die Edit gesperrt.

    Ich hatte mal einen ähnlichen Fall mit dem Auflistungs-Modul. Dort hat FIND_IN_SET partout nicht funktioniert mit einem Inserttag, aber mit IN.
    Also hier:
    xyzbenutzerid IN ({{user::id}})
    Schade, geht bei mir nicht

  32. #32
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Daumen hoch

    So servus Leute,

    besten Dank, dass ihr euch hier so rege beteiligt habe!
    Also will ich nun mal der Reihe nach antworten - früher ging es leider nie so richtig mit dem Antworten, weil ich die Woche über sehr eingespannt war.

    @Andreas
    Das Problem war - beschämenderweise -, dass ich einfach nur das falsche Template ausgesucht hatte. Ich hätte catalog_edit nehmen müssen, hatte aber catalog_full drin - logisch, dass da nix kam, weil dieses Template natürlich nichts dergleichen vorsieht.

    @izanagi
    catalogeditsingleown hat bei mir leider nicht funktioniert, darum kann ich dazu nichts beitragen.
    Ich habe mich nun an deiner anschaulichen Auflistung entlang gehangelt und bin auch zum Ziel gekommen.
    Folgende Konfiguration habe ich nun gewählt:

    Auf der Listenseite habe ich "Katalog-Liste" eingebunden mit den folgenden Einstellungen:
    Weiterleitungsseite: Bearbeitungsseite (mit "Katalog-Bearbeiten"-Modul)
    • Sichtbare Felder: Userid-Feld (und andere, wenn man mag)
    • Bedingung: ID-User-Feld={{user::id}}
    • Bearbeitung aktivieren: Angehakt
    • Katalog-Layout: catalog_simple (sicherlich egal, was man hier nimmt oder?)

    @alle
    Mein nun noch verbleibendes Problem ist, dass auf der Bearbeitungs-Seite der FE-User dann zwar schön nur seinen Eintrag ausgegeben bekommt (durch ändern der Domain kommt er übrigens auch auf keine anderen Einträge; also items/1.html zu items/2.html obwohl es User-ID 2 auch gibt inkl. Katalogeintrag). Allerdings ist nun das Problem in der Bearbeitung, dass er unter seinen Textfeldern, etc. drei Optionen hat:
    - Speichern
    - Speichern und Schließen
    - Speichern und Neu

    Insbesondere die dritte Option soll ihm natürlich nicht zur Verfügung stehen. Ich habe nun einfach aus der catalog_edit rausgelöscht. Nun sind die input-submits natürlich weg. Besteht trotzdem für den User noch eine Möglichkeit, einen neuen Eintrag aus dem FE anzulegen?

    Vielen, vielen Dank an alle, die mir mitgeschrieben haben - ihr habt mir wunderbar geholfen :-).

    Beste Grüße
    Alexander
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  33. #33
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    items/2.html bedeutet - Datensatz mit der ID 2 aus der Tabelle, nicht Datensatz, bei dem das useridfield auf die 2 verweist.

    Zu dem anderen Problem kann ich nichts sagen. Gibt das Listenmodul, in welchem du ja die FE-Bearbeitung aktivierst, nicht schon einen Link aus 'neuen Datensatz erstellen'? Wenn ja, brauchst du ihn ja nur anzubieten, wenn die Liste noch keinen Eintrag ausgibt.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  34. #34
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard

    Hi Alex gut das du das ansprichst, hab ich auch gerade probiert... natürlich kann man aus /editseite/items/username.html einfach /editseite.html machen und schon könnte der einen neuen Eintrag erstellen.
    Das muss man dann noch im Template verbieten.

    Ach stimmt, wenn man einen falschen Namen oder ID in die URL gibt dann kann man ebenfalls einen neuen EIntrag erstellen. Das ist natürlich doof.
    Geändert von izanagi (21.07.2012 um 18:42 Uhr)

  35. #35
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Standard

    Servus!

    Also wenn ich aus
    http://domain.de/bearbeitung/items/1.html
    http://domain.de/bearbeitung/items/2.html
    mache und währenddessen mit dem Benutzer mit User-ID "1" eingeloggt bin, kommt auf der ersten Seite die normale und korrekte Bearbeitung. Auf der zweiten Seite kommt hingegen dann die folgende Meldung:
    Sie haben keine Berechtigung, diesen Eintrag zu bearbeiten.

    Das läuft ja eigentlich wie gewollt.
    Gibt es denn nun eine Möglichkeit für den Nutzer einen neuen Eintrag zu erstellen? Das wollte ich durch löschen der inputs aus dem Template unterbinden. Kann er das irgendwie anders auch "triggern"?

    Beste Grüße
    Alexander
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  36. #36
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard

    Hi, ja das meinte ich ja vorhin.

    Wenn du nun aus http://domain.de/bearbeitung/items/1.html
    einfach http://domain.de/bearbeitung.html machst dann könnte der jenige ein neues anlegen.
    Ich arbeite gerad an einer Lösung. Ich muss aber auch weg... ich kann erst morgen weiter machen

    Nur die Buttons rausnehmen das reicht leider nicht.

  37. #37
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard

    Ich habe nur kurz eine Lösung gebaut, jedoch nicht Updatesicher.
    Die Datei ModuleCatalogEdit.php modifizieren:

    Der Code in Zeile 468 bis 483

    PHP-Code:
            // if no item, then check if add allowed and then show add form
            
    if (!$objCatalog || $objCatalog->numRows )
            {
                
    $blnModeAdd true;
                
    // Load defaults.
                
    $arrValues = array();
            }
            else
            {
                
    // check if editing of this record is disabled for frontend.
                
    foreach ($this->catalog_edit as $key=>$field)
                {
                    if(!
    $this->editRecordAllowed($field$this->objDCEdit->activeRecord))
                        return;
                }
            } 

    muss ausgetauscht werden mit

    PHP-Code:
            // ########### Prüfen ob User in einer bestimmten Gruppe ist ##########################
            
    $this->import('FrontendUser','user');
            
    $user_id $this->user->id;  
            
    $this->import('FrontendUser''Member');
            
    $memberGroups $this->Member->groups;
            
    $pflichtgruppe 21// Mitglieder dieser Gruppe haben keine Befugnis
            
    if (!in_array($pflichtgruppe$memberGroups )){
                
    $denied true;
            } else{
                
    $denied false;
            }
            
            
    // if no item, then check if add allowed and then show add form
            
    if ($denied == true && (!$objCatalog || $objCatalog->numRows 1))
            {
                return 
    false;
            }elseif (!
    $objCatalog || $objCatalog->numRows )
            {
                
    $blnModeAdd true;
                
    // Load defaults.
                
    $arrValues = array();
            }
            else
            {
                
    // check if editing of this record is disabled for frontend.
                
    foreach ($this->catalog_edit as $key=>$field)
                {
                    if(!
    $this->editRecordAllowed($field$this->objDCEdit->activeRecord))
                        return;
                }
            } 
    Wenn der User sich neu registriert kommt er in die Mitgliedergruppe "neuling" , bei mir die ID 21
    der Variable Pflichtgruppe gebe ich jetzt die Mitgliedergruppen ID 21
    Somit dürfen nur User in dieser Gruppe ein neues erstellen und kann keinen zweiten erstellen. Du musst natürlich dem jenigen die Gruppe wieder entziehen wenn er eins erstellt.
    Sprich sobald er eines erstellt hat, ist er kein Neuling mehr und gehört nicht mehr zur Gruppe 21
    Du muss nur noch eine Fehlermeldung generieren, ich muss jetzt leider echt weg.

  38. #38
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das scheint mir viel zu kompliziert. Du brauchst doch nur in der DB-Tabelle nachzusehen, ob der User schon einen Eintrag hat.
    PHP-Code:
    $this->import('Database');

    $objData $this->Database->prepare("SELECT * FROM cat_meinKatalog WHERE meinMemberIdFeld=?")
                  ->
    limit(1)
                  ->
    execute($this->User->id);

    if (
    $objData->numRows 0)
    {
      echo 
    'du hast schon';

    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  39. #39
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Standard

    Einen wunderbaren Sonntagmorgen,

    besten Dank für eure beiden Lösungsvorschläge!

    @iznagi
    Das ist sicherlich eine schön zugeschnittene Lösung, die - wenn sie sauber klappt - ziemlich elegant ist (über Gruppen etc.).
    Allerdings verwende ich leider nicht dein Gruppen-Berechtigungskonzept und nutze das schon für andere Zwecke. Trotzdem vielen Dank für diesen Vorschlag, welcher sicherlich anderen Usern hier sicher helfen wird.

    @Andreas
    Das klingt perfekt, dass man das quasi einfach nur rausfiltern kann. Kanst du mir das etwas detaillierter ausführen, da meine Kenntnisse wieder nicht genug in die Contao-Struktur reinreichen und auch in PHP im Allgemeinen, um das umzusetzen. Das würde mir wirklich helfen, weil man ja dann sogar ein Zwei-Stufen-Konzept fahren könnte:

    Anlegeseite:
    Katalog-Bearbeiten-Modul mit Anlegefunktion, die nicht geblockt ist (Zugang zur Seite wird über deine Kontrolle gefiltert)
    Bearbeitungsseite:
    Katalog-Bearbeiten-Modul ohne Anlegefunktion, die entesprechend geblockt ist (Zugang zur Seite wird über deine Kontrolle gefiltert; Zugang nur, wenn bereits ein Eintrag angelegt ist mit seiner User-ID)

    Das würde sicherlich einiges erleichtern oder? Wäre ein vollautomatischer Frontend-Workflow dann :-).

    Beste Grüße
    Alexander
    Geändert von Alexander (22.07.2012 um 13:46 Uhr)
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

  40. #40
    Contao-Fan
    Registriert seit
    02.08.2009.
    Ort
    Westfalen
    Beiträge
    639

    Standard

    Also, ich habe es nun so versucht, die Eintrags-Anlage nur einmal zu ermöglichen:

    catalog_edit.html5:
    Code:
    <?php $this->import('Database');
    $objData = $this->Database->prepare("SELECT * FROM cat_testkatalog WHERE id_user_fe=?")
                  ->limit(1)
                  ->execute($this->User->id);
    ?>
    
    <?php if ($objData->numRows > 0) : ?>
    <p>No further Editing allowed.</p>
    
    <?php else : ?>
    
    <form action="<?php echo $this->action; ?>" id="<?php echo $this->formId; ?>" method="post" enctype="<?php echo $this->enctype; ?>">
    <div class="formbody">
    <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId; ?>">
    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
    <table cellspacing="0" cellpadding="0" summary="Table holds form input fields">
    <?php echo $this->field; ?>
      <tr class="<?php echo $this->rowLast; ?>">
        <td class="col_0 col_first">&nbsp;</td>
        <td class="col_1 col_last">
          <div class="submit_container">
    <input type="submit" name="saveNclose" id="saveNclose" class="tl_submit" accesskey="c" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['saveNclose']); ?>">
          </div>
        </td>
      </tr>
    </table>
    </div>
    </form>
    
    <?php endif; ?>
    Wahrscheinlich reichen meine Kenntnisse hier nicht, um es richtig anzubringen, da sowohl FE-User, die bislang keinen Eintrag im gewählten Katalog haben, als auch User, die dort bereits einen haben, das Formular angezeigt bekommen.

    Beste Grüße
    Alex
    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

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
  •