Ergebnis 1 bis 16 von 16

Thema: Auslesen und anzeigen eines Feldes

  1. #1
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard Auslesen und anzeigen eines Feldes

    Hallo Leute,

    ich wage mich langsam an das Thema PHP heran und hab schon einiges gelesen und über "try & error" probiert.

    Ziel: auslesen und anzeigen eines Feldes.
    Ich habe mit der Erweiterung xt_members_fieldeditor ein neues Anredefeld für Mitgleider erzeugt . das wird auch in der Tabelle angezeigt.

    Jetzt würde ich es gerne per eigenem Script ausgeben. Dazu wird erst getestet, ob es das Feld gibt und wenn ja, soll der Inhalt ausgegeben werden:

    PHP-Code:
    <?php
    $this
    ->import('Database');

    if (
    $this->Database->Fieldexists('xt_anrede_neu''tl_member'))
     { 
     echo
    'Feld Anrede existiert';
      
    $inhalt $this->Database->prepare("SELECT xt_anrede_neu FROM tl_member")
                                ->
    execute();
       
       foreach(
    $inhalt as $key=>$ausgabe)
       
        echo 
    "Inahlt:  $ausgabe " ;
        }
     
     

     else
     { 
     echo 
    "Sorry, das Feld gibt es nicht";
     }
     
    ?>
    Die Anzeige, ob das Feld existiert funktioniert. Aber leider wird kein Inhalt ausgegeben. Die PHP-datei habe ich im eingeloggten Bereich hinterlegt.

    Kann mir jemand sagen, was ich falsch gemacht habe?
    Sehe ich es richtig, dass es sich bei einem solchen Feld um ein assoziatives Array handelt?

    Vielen Dank!

    Gruß
    varix
    Geändert von varix (23.10.2010 um 18:31 Uhr)

  2. #2
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    So, hab jetzt mit folgendme Code es geschafft, das Array auszulesen.

    PHP-Code:
    <?php
    $this
    ->import('Database');

    if (
    $this->Database->Fieldexists('xt_anrede_neu''tl_member'))
     { 
     echo
    "Feld Anrede existiert\n";
      
    $inhalt $this->Database->execute("SELECT xt_anrede_neu FROM tl_member");
         
         
    $anzeige $inhalt->fetchALLAssoc();                    
       
       foreach(
    $anzeige as $ausgabe)
       
        echo 
    $ausgabe['xt_anrede_neu'] . "\n" ;
        }
     
     

     else
     { 
     echo 
    "Sorry, das Feld gibt es nicht";
     }
     
    ?>
    Jetzt wird allerdings das ganze Array angezeit. Array:xt_anrede_neu mit den Feldrn: Herr & Frau.

    Da sich ein Mitlgied eingeloggt hat und entweder Mann oder Frau ist, würde ich gerne das entsprechend anzeigen lassen.

    Wie würde hier der richtige Code aussehen?

    varix

  3. #3
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    Hab es jetzt mit folgender Variante hinbekommen:

    PHP-Code:
    <?php
    $this
    ->import('Database');

      
    $inhalt $this->Database->execute("SELECT xt_anrede_neu FROM tl_member");
         
         
    $anzeige $inhalt->fetchALLAssoc();                    
       
      if(
    $anzeige 'Herr')
      {
      echo
    'Herr';
      }
      else
      {
      echo
    'Frau';
      }
     
    ?>
    Ist das aus eurer Sicht ok so? Verbesserungsvorschläge?

    Schönen Abend noch
    varix

  4. #4
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Die Frage ist, was Du genau machen willst. Das hab ich nämlich noch nicht so verstanden

    Also in der letzten Variante gehst Du jeden Datensatz in der Datenbank durch und gibst entweder Herr oder Frau aus. =)
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  5. #5
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    Hallo Toflar,

    leider habe ich mich zu früh gefreut

    Was will ich?
    Ich möchte gerne eine persönliche Anrede (Herr/Frau) ausgeben. Ich weiss, dass es dafür Inserttags gibt. Aber wie gesagt, ich bin PHP-Anfänger und lerne am beseten, wennich versuche es selbst nachzustellen.

    dazu habe ich über xt_members_fieldeditor ein neues Feld erzeugt, wo die persönliche Anrede bei einem Mitgleid hiterlget ist.

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');

    /**
     * @copyright  varix 2010
     * @author     varix
     * @package    Backend
     * @license    GPL
     * @creator    xtmembers field editor, copyright 2009 aurealis, http://www.aurealis.de
     * @filesource
     */

    if (strpos($GLOBALS['TL_DCA']['tl_member']['palettes']['default'], '{personal_legend},') === false) {
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] .= ',xt_anrede_neu';
    } else {
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace('{personal_legend},','{personal_legend},xt_anrede_neu,'$GLOBALS['TL_DCA']['tl_member']['palettes']['default']);
    }

    $GLOBALS['TL_DCA']['tl_member']['fields']['xt_anrede_neu'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu'],
        
        
    'exclude'                 => true,
        
    'search'                  => true,
        
    'inputType'               => 'select',
        
    'options'                 => array('Frau' => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select']['Frau'],'Herr' => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select']['Herr']),    
        
    'eval'                    => array('feEditable' => true,'feViewable' => true,'feGroup' => 'personal','tl_class' => 'w50','mandatory' => true,'includeBlankOption' => true)
    );

    /**
     * Class tl_member_xt_members_anrede
     *
     * Provide miscellaneous methods that are used by the data configuration array.
     * @copyright  varix 2010
     * @author     varix
     * @package    Controller
     */
    class tl_member_xt_members_anrede extends tl_member
    {
    }

    ?>
    Jetzt habe es mir nochmal angeschaut und geesehen, dass es sich um ein Array handelt und bei dem array options die unterschiedlichen Anreden Herr/Frau)hinterlegt sind.

    Dann habe ich es mit folgende Code versucht:
    PHP-Code:
    <?php
    $this
    ->import('Database');

      
    $inhalt $this->Database->execute("SELECT xt_anrede_neu FROM tl_member");
         
     
    $GlOBALS['TL_DCA']['tl_member']['fields']['xt_anrede_neu']['options']  = $anzeige;

      echo 
    $anrede;
     
    ?>
    Ich war/bin in der Annahme, dass wenn das Mitgleid sich angemeldet hat, dass Feld entsprechdn gesetzt ist. Leider hat es keine Ausgabe gegeben.

    Kannst dur mir einen Anstoss in die richtige Richtung geben? Habe ich einen Gedankenfehler?

    Gruß
    varix

    P.S. ich hoffe mich als Anfänger verständlich ausgedrückt zu haben

  6. #6
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Du vermischt irgendwie ein paar Sachen, habe ich so den Eindruck

    Was Du tun musst ist mal dein DCA anpassen:
    PHP-Code:
    'options'                 => array('Frau' => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select']['Frau'],'Herr' => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select']['Herr']), 
    sollte eigentlich so aussehen:
    PHP-Code:
    'options'                 => array('Frau','Herr'),
    'reference'                 => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select'], 

    In der Datenbank wird dann entweder "Frau" oder "Herr" gespeichert (gescheiterweise würdest Du eigentlich die Englische Anrede speichern und die Deutsche Übersetzung dazu dann ausgeben).

    Die Ausgabe erfolgt einfach so:
    PHP-Code:
    <?php
    // weiss grad nicht auswendig ob es das überhaupt braucht, musst Du testen
    $this->import('Database');
    $objData $this->Database->query("SELECT xt_anrede_neu FROM tl_member");
    echo 
    $objData->xt_anrede_neu;
    ?>
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  7. #7
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    Hallo Toflar,

    danke erstmal für deine schnelle Antwort.

    Du vermischt irgendwie ein paar Sachen, habe ich so den Eindruck

    Was Du tun musst ist mal dein DCA anpassen:
    PHP-Code:
    'options'                 => array('Frau' => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select']['Frau'],'Herr' => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select']['Herr']), 
    sollte eigentlich so aussehen:
    PHP-Code:
    ptions'                 => array('Frau','Herr'),
    '
    reference'                 => &$GLOBALS['TL_LANG']['tl_member']['xt_anrede_neu_select'], 
    Diesen Teil habe ich nicht erstellt, sondenr wurde durch die Erweiterung xt_members_fieldeditor erstellt. Ich habe zwei Mitlgieder angelegt, ein weibliches (Frau) und ein männliches(Herr).

    Wenn ich den Inserttag {{user:_xt_anrede_neu}} benutze, wird auch die Anrede richtig ausgegeben. Das scheint also zu funktionieren. Auch in den Tabellen der Mitlgieder sind die richtigen Werte eingetragen.

    Dein Vorschlag für die Ausgabe:
    PHP-Code:
    <?php
    // weiss grad nicht auswendig ob es das überhaupt braucht, musst Du testen
    $this->import('Database');
    $objData $this->Database->query("SELECT xt_anrede_neu FROM tl_member");
    echo 
    $objData->xt_anrede_neu;
    ?>
    ergibt leider bei der Frau die Ausgabe Herr......

  8. #8
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Jo natürlich funktioniert mein Code so nicht. Du willst ja wahrscheinlich einen bestimmten Datensatz, also musst Du sagen welchen.
    Dann halt doch ein bisschen mehr Details

    Tabelle:
    Code:
    +----+---------------+
    | ID | xt_anrede_neu |
    +----+---------------+
    | 1  |     Herr      |
    +----+---------------+
    | 2  |     Frau      |
    +----+---------------+
    | 12 |     Frau      |
    +----+---------------+
    | 18 |     Herr      |
    +----+---------------+
    Anrede der ID 18 ausgeben:
    PHP-Code:
    <?php
    $objData 
    $this->Database->prepare("SELECT xt_anrede_neu FROM tl_member WHERE id=?")->execute(18); 
    echo 
    $objData->xt_anrede_neu;
    ?>
    Erzeugt:
    Herr
    Alle Anreden ausgeben:

    PHP-Code:
    <?php
    $objData 
    $this->Database->query("SELECT xt_anrede_neu FROM tl_member");
    while(
    $objData->next())
    {
    echo 
    $objData->xt_anrede_neu "\n";
    }
    ?>
    Erzeugt:
    Herr
    Frau
    Frau
    Herr
    Alles klar?
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  9. #9
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    Hallo Toflar,
    erstmal vielen dank für deine Antwort und vorallem für deine Geduld, auf die ein PHP-Anfänger, wie ich, angewiesen ist.

    Aber anhand meiner wahrscheinlich schlecht formulierten Fragen, erkennt man das auch...

    Ok, jetzt weiss ich zwar, wie ich die unterschiedlichen oder alle Feöder ausgeben kann.

    Was will ich?
    Es soll nur die Anrede ausgegeben werden, die bei dem Mitgleid im Feld eingetragen ist. Deshalb habe ich zwei Mitlgieder. Mitlgied Max ist männlich und hat in der Tabelle tl_member/xt_anrede_neu: Herr
    Petra ist weiblich und dort steht: tl_member/xt_anrede_neu:Frau.

    Jetzt soll bei Anmeldung des Mitgleides die entsprechnde Anrede ausgegeben werden.

    Wäre toll, wenn du mir das nochmals zeigen könntest?

    Vielen Dank!
    varix

  10. #10
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Bei der Anmeldung? Also nachdem sich der User eingeloggt hat?
    Dann musst Du erst mal dessen User-ID wissen

    So:
    PHP-Code:
    // Importen immer nur dann wenn man es muss - erst mal testen, ob es notwendig ist!
    $this->import('Database');
    $this->import('FrontendUser''User');

    $objData $this->Database->prepare("SELECT xt_anrede_neu FROM tl_member WHERE id=?")->execute($this->User->id);  
    echo 
    $objData->xt_anrede_neu
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  11. #11
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    Jaaaa....... jetzt hat es gepasst.

    Trotdem frustiert mich das alles ein wenig oder vielleicht habe ich mir die Messlatte doch ein wenig zu hoch gehängt. Vielleicht ist es vermessen zu erwarten, dass man nach wenigen Wochen und dem lesen von zwei Büchern das OOP versteht

    Gruß
    varix

  12. #12
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    OOP ist an sich nicht schwierig Aber hier geht es ja auch nicht im geringsten um OOP sondern um eine Datenbank-Abfrage

    Ach übrigens, versuch mal das:
    PHP-Code:
    <?php
    $this
    ->import('FrontendUser''User');
    echo 
    $this->User->xt_anrede_neu;
    ?>
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  13. #13
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    OOP ist an sich nicht schwierig Aber hier geht es ja auch nicht im geringsten um OOP sondern um eine Datenbank-Abfrage

    Ach übrigens, versuch mal das:
    PHP-Code:
    <?php
    $this
    ->import('FrontendUser''User');
    echo 
    $this->User->xt_anrede_neu;
    ?>
    Ja, das hat auch funktioniert.
    Wie, es handelt sich nicht um OOP? Jetzt bin ich sowas von durcheinander...

    Code:
    $this->import('FrontendUser', 'User');
    Handelt es sich hierbei nicht um die Klasse System mit der Mehtode import(), wobei eine Funktion in einem Objekt als Methode bezeichnet wird und es sich dementsprechend um OOP handelt?

    Korrigiere mich, falls ich mich irre?

  14. #14
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Ja natürlich, aber das Problem war ja nicht OOP, sondern dass Du nicht wusstest, wie die Abfrage genau aussehen muss

    Aber eben. Abfragen musst Du gar nicht, weil (Achtung, OOP ) die ganze Tabelle resp. jede einzelne Spalte der tl_members über das User-Objekt als Property abrufbar ist
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  15. #15
    Contao-Fan Avatar von varix
    Registriert seit
    26.03.2010.
    Ort
    Berlin
    Beiträge
    626

    Standard

    Nochmals danke!

    Habe mal folgendes probiert und es geht auch:
    PHP-Code:
    echo $this->User->xt_anrede_neu 
    Kannst du mir kurz folgendes erklären?
    In welchem Zusammenhang steht User zu tl_member. In der tl_member sind doch in der Spalte xt_anrede_neu die Werte eingetragen. Es gibt auch die Tabelle tl_user, aber das sind doch die Admin.

    Vielen Dank!

  16. #16
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Nein. Die tl_member (Members oder Mitglieder) betreffen das Frontend. Die tl_user (User oder Benutzer) betreffen das Backend.

    Dafür gibt es zwei Klassen. FrontendUser und BackendUser, welche beide von der Klasse User abgeleitet sind.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Wert eines Feldes vom dma_elementgenerator auslesen
    Von carlo im Forum dma_elementgenerator
    Antworten: 4
    Letzter Beitrag: 02.02.2012, 10:20
  2. Error 403 beim Anlegen eines Feldes
    Von Anke im Forum xtmembers
    Antworten: 2
    Letzter Beitrag: 29.05.2010, 08:19
  3. Inhaltselemente eines Artikels auslesen
    Von steffen im Forum Allgemeine Inhaltselemente
    Antworten: 1
    Letzter Beitrag: 17.03.2010, 14:17

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •