+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Variable an Template leiten

  1. #1
    War schon öfter hier
    Registriert seit
    16.01.2008
    Beiträge
    182
    Bedankte sich
    46
    Erhielt 7 Danksagungen
    in 5 Beiträgen

    Standard Variable an Template leiten

    Hallo,

    wie gebe ich aus einer Model-function (typ return $query) eine
    Variable/Flag weiter bis ans Template?


    Ich habe die Variable Anfangs ins der Klasse
    protected $flag = 0;
    gesetzt. Später in einer if (... else { $flag = 1; )


    Irgendwie taucht sie nicht in den Template-Vars auf


    ----------
    Wie macht ihr das? In der
    models/compo.php

    views/compo/view.html.php

    views/compo/tmpl/default.php


    Danke für Hilfen und Tipps,
    viele Grüße, w.

  2. #2
    Hat hier eine Zweitwohnung Avatar von JoomDesign
    Registriert seit
    19.03.2006
    Ort
    Berlin, Deutschland
    Beiträge
    1.927
    Bedankte sich
    269
    Erhielt 594 Danksagungen
    in 511 Beiträgen

    Standard

    In der view.html.php
    PHP-Code:
    $object $query// z.B.
    $this->assign('var_im_template'$object);
    //oder
    $this->assignRef('var_im_template'$object); 
    http://api.joomla.org/Joomla-Framewo...ew.html#assign

  3. Erhielt Danksagungen von:


  4. #3
    War schon öfter hier
    Registriert seit
    16.01.2008
    Beiträge
    182
    Bedankte sich
    46
    Erhielt 7 Danksagungen
    in 5 Beiträgen

    Standard

    haut noch nicht hin.
    In der Variable $flag steckt der ganze query-String drin.
    Irgendwas sehe ich nicht ...

    models/compo.php
    PHP-Code:
    protected $flag 0; ...
    function 
    _getCompoQuery(  )    { ...
    if () { } else {
     if () { ... 
    $query ""; ... } else  { $this->flag 1; } }
    return 
    $query; } 
    views/compo/view.html.php
    PHP-Code:
        function display($tpl null)     {
            
    $model  = &$this->getModel(); ...
            
    $flag     $model->_getCompoQuery();
            
    $this->assignRef('flag'  $flag); ... 
    (das mit deinem $object = $query; habe ich nicht verstanden)

    views/compo/tmpl/default.php
    PHP-Code:
    if (isset($this->flag) AND $this->flag == 1)  { echo "TEXT";} 
    Gruß, w.
    Geändert von wejo (01.12.2010 um 15:54 Uhr)

  5. #4
    Verbringt hier viel Zeit
    Registriert seit
    24.01.2006
    Beiträge
    594
    Bedankte sich
    108
    Erhielt 359 Danksagungen
    in 203 Beiträgen

    Standard

    Bei deinem kurzen Codeausschnitt kann man kaum erkennen, was du machen willst. Häng doch mal die komplette Komponente hier rein.

    Wahrscheinlich liegt es daran, dass du $flag nicht aus dem Model zurück gibst...aber schwer zu sagen, bei dem wenigen Code

  6. #5
    War schon öfter hier
    Registriert seit
    16.01.2008
    Beiträge
    182
    Bedankte sich
    46
    Erhielt 7 Danksagungen
    in 5 Beiträgen

    Standard

    also prinzipiell sieht mein Code erstmal ok aus?

    wie würdet ihr den ganz einfach so eine Variable "durchreichen"?

    Da sollte doch eine Art Routine bzgl. des Model – View – Controller
    Konzeptes möglich sein.

    eine weitere Var in einer ganz einfachen Compo:
    http://cocoate.com/de/beispiel-komponente-auto

    und hier Code für o.g. Dateien?

    viele Grüße, w.

  7. #6
    Hat hier eine Zweitwohnung Avatar von JoomDesign
    Registriert seit
    19.03.2006
    Ort
    Berlin, Deutschland
    Beiträge
    1.927
    Bedankte sich
    269
    Erhielt 594 Danksagungen
    in 511 Beiträgen

    Standard

    $flag ist doch protected. Wie solls dann ins View gelangen?

    Und das das was Du nicht verstanden hast war ein Beispiel für das hier:
    PHP-Code:
    $flag     $model->_getCompoQuery(); 
    wenn Du im View print_r($flag); machen würden erhälst Du ne Fehlermeldung (protect bla bla) oder garnichts. Solltest Dir auch mal angewöhnen beim programmieren z.B. mit error_reporting(E_ALL); die Fahlerausgabe zu aktivieren.

    // edit: Außerdem müsstest Du mit
    $flag = $model->flag; die Daten nach $flag = $model->_getCompoQuery(); holen. Ich sehe jedenfalls kein return; in deiner Funktion.

    Aber bembelimen hat Recht - mit so wenig Schnipsel ist das alles nur raten und try and error.
    Geändert von JoomDesign (01.12.2010 um 11:42 Uhr)

  8. #7
    War schon öfter hier
    Registriert seit
    16.01.2008
    Beiträge
    182
    Bedankte sich
    46
    Erhielt 7 Danksagungen
    in 5 Beiträgen

    Standard

    Zitat Zitat von joom_mob-i-co Beitrag anzeigen
    $flag ist doch protected. Wie solls dann ins View gelangen?
    ändert sich auch nicht, wenn public ... oder einfach var

    ... die Fahlerausgabe zu aktivieren.
    es gibt keine php-Fehler.

    ... Ich sehe jedenfalls kein return; in deiner Funktion.
    ist ein return $query;. Das habe ich grad oben nachgetragen.

    print_r($flag); gibt in der view.html den query-String aus und nicht 1 oder 0 ... :(
    Ist wohl klar, wenn das return der Funktion $query heißt?
    Wie kommt man an die Var?
    Aber Standard-Möglichkeiten habt ihr jetzt wohl schon geschrieben...



    Aber bembelimen hat Recht - mit so wenig Schnipsel ist das alles nur raten und try and error.
    da steht mir (jetzt) zuviel Huddel & Notizen drin ...
    Allgem. ist sie wie die Auto-Compo.

    Grüße, w.

  9. #8
    War schon öfter hier
    Registriert seit
    16.01.2008
    Beiträge
    182
    Bedankte sich
    46
    Erhielt 7 Danksagungen
    in 5 Beiträgen

    Standard

    Zitat Zitat von joom_mob-i-co Beitrag anzeigen
    ...- mit so wenig Schnipsel ist das alles nur raten und try and error.
    models/auto.php
    PHP-Code:
    defined('_JEXEC') or die();
    jimport('joomla.application.component.model');
    /** *Auto Component Auto Model * */
    class AutoModelAuto extends JModel {
        function 
    _getAutoQuery( &$options )     {
            
    // TODO: Cache on the fingerprint of the arguments
            
    $db            JFactory::getDBO();
            
    $id            = @$options['id'];

            
    $select 'a.*';
            
    $from    '#__auto AS a';

            
    $wheres[] = 'a.published = 1';

            
    $query "SELECT " $select .
                    
    "\n FROM " $from .
                    
    "\n WHERE " implode"\n  AND "$wheres );
    // hier beginnen und enden o.g. if-Schleifen mit $flag 
            
    return $query;
        }
        function 
    getAutoList$options=array() )
        {
            
    $query    $this->_getAutoQuery$options );
            
    $result $this->_getList$query );
            return @
    $result;
        }



    views/auto/view.html
    PHP-Code:
    jimport'joomla.application.component.view');
    /**
     * HTML View class for the auto Component
     */
    class AutoViewAuto extends JView
    {
        function 
    display($tpl null)
        {
            
    $model      = &$this->getModel();
              
    $rows     $model->getAutoList();
            
    $this->assignRef('rows'  $rows);
    // hier die o.g. Weitergabe ... und print_r($flag); das query-string ausgibt
            
    parent::display($tpl);
        }    



    views/default.php
    PHP-Code:
    <?php
    // hier Ausgabe: if ((isset($this->flag)) AND ($this->flag == 1))  {    ...
    ?>
    <h1><?php echo "&Uuml;berschrift - default.php-Template"?></h1>
    <ul>
    <?
    // Auslesen der Datensätze im Array
    foreach ($this->rows as $row) {
        
    ?>
        <li><?php echo $row->text?> <small><em>(<?php echo $row->hersteller?>)</em></small><br>
    <a href="<?php echo $row->photo_gross?>" onclick="FensterOeffnen(this.href); return false"><img src=<?php echo $row->photo_klein?>></a>
        </li>
        <?php
    }

  10. #9
    Verbringt hier viel Zeit
    Registriert seit
    24.01.2006
    Beiträge
    594
    Bedankte sich
    108
    Erhielt 359 Danksagungen
    in 203 Beiträgen

    Standard

    Das die Autokomponente funktioniert, das wissen wir....wichtig wäre dein Code...ich versuchs nochmal: häng doch einfach deine Komponente hier rein, damit man sich das mal anschauen kann...

  11. #10
    War schon öfter hier
    Registriert seit
    16.01.2008
    Beiträge
    182
    Bedankte sich
    46
    Erhielt 7 Danksagungen
    in 5 Beiträgen

    Standard

    Hallo,
    ich habs mittlerweile gelöst.
    Das wäre also ein Variable durchreichen für eine Formularschutz-Prüfung aus einem zusätzlichen Feld:

    controller.php
    PHP-Code:
    class CompoController extends JController    {
    // ------------ Formularschutz ---------------
        
    function menschmaschinecheck $formprot )    { 
            if ((
    $formprot == 'aphrodite') OR ($formprot == 'Afrodite'))
            {    
    $formflag "1";
                } else { 
                
    $formflag "0";    }
            return 
    $formflag;                    } 
    also nur hier per Funktion eine flag setzen

    models/compo.php
    nix

    views/compo/view.html.php
    nix

    views/compo/tmpl/default.php
    PHP-Code:
    // ------------ Formularschutz ---------------
         
    if (!isset($_REQUEST['forminput'])) {
            
    $spamfrei "a...e";                 // Standard Eingabe einsetzen
                                        
    } else { 
            
    $spamfrei $_REQUEST['forminput']; // alte Eingabe wieder einsetzen
            // sonst Hinweis falsche Eingabe
            
    if (CompoController::menschmaschinecheck (@$_REQUEST['forminput']) == "0") {     
                echo 
    "<div class=\"error\">Bitte einen Formularschutz eintragen:<br /> 
                 ....</div>"
    // JTEXT
    }  } 
    // ... weiter unten im <form ...
    <input title="" value="'.$spamfrei.'" class="Feld1" type="text" name="forminput" size="22"
    und hier auf die flag reagieren.

    Also diese "Code-Verstreuung" in Dateien und Verzeichnisse ist mir noch etwas fremd. Ich verstehe den Sinn, aber ...
    Gruß, w.
    Geändert von wejo (06.12.2010 um 11:15 Uhr) Grund: falsch geclipped

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

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