Ergebnis 1 bis 6 von 6

Thema: [GELÖST] Problem mit 2 foreach-Schleifen: Alle Werte werden angezeigt

  1. #1
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard [GELÖST] Problem mit 2 foreach-Schleifen: Alle Werte werden angezeigt

    Hallo Leute, ich steh zur Zeit voll auf dem Schlauch.

    Ich komm hier nicht weiter. Folgendes:

    Ich hab 2 Tabellen. In der 1. Tabelle existieren nur die Grunddaten eines Wertpapieres. In der 2. Tabelle werden täglich die Kurse zu den Wertpapieren eingetragen. Soweit sogut. Das funktioniert alles.

    Aber im Frontend sehe ich nun für jeden Tag den Kurs zum dazugehörigen Wertpapier. Ich weiß nicht, wie ich es anstellen kann, dass zum Wertpapier immer nur der letzte Kurs angezeigt wird. Zur Zeit wird alles angezeigt.

    Kann mir jemand auf die Sprünge helfen?

    Hier sind meine Models:

    Dieses holt alle Informationen zum Wertpapier aus der DB:
    PHP-Code:
    class MarketPriceModel extends \Model
    {
        
    /**
         * Table name
         * @var string
         */
        
    protected static $strTable 'tl_market_price';
        
        public static function 
    findAllByPublished($offset$limit, array $arrOptions=array())
        {
            
    $t = static::$strTable;
            
    $arrColumns = array("$t.published=?");
            
    $arrOptions = array('order'=>"$t.sorting asc"'offset'=>$offset'limit'=>$limit);
                    
            return static::
    findBy($arrColumns1$arrOptions);
        }

    Dieses holt die Kurse aus der Datenbank
    PHP-Code:
    class MarketCourseModel extends \Model
    {
        
    /**
         * Table name
         * @var string
         */
        
    protected static $strTable 'tl_market_course';
        
        public static function 
    findAllByPublished($wid, array $arrOptions=array())
        {
            
    $t = static::$strTable;
            
    $arrColumns = array("$t.wid=?");
            
    $arrOptions = array('order' => "$t.date desc");
                    
            return static::
    findBy($arrColumns$wid$arrOptions);
        }

    Und das ist dann mein Modul:
    PHP-Code:
    protected function compile()
        {
            \
    System::loadLanguageFile('tl_market_price');
            
            
    $objTemplate = new \FrontendTemplate(($this->market_template $this->market_template 'mod_market_price'));
                        
            
    $limit 4;
            
    $offset 0;
            
            
    $result_wertpapier = \MarketPriceModel::findAllByPublished($offset$limit);    
            
            foreach (
    $result_wertpapier as $wertpapier_result)
            {
                
    $result_course = \MarketCourseModel::findAllByPublished($wertpapier_result->id);
                
                foreach(
    $result_course as $course_result)
                {
                    
    $market[] = array
                    (
                        
    'title'         => specialchars($wertpapier_result->title),
                        
    'title_short'     => specialchars($wertpapier_result->title_short),
                        
    'course'        => specialchars($course_result->share),
                        
    'date'            => $course_result->date,
                    );
                }
            }
            
    $objTemplate->wertpapier $market;
            
            
    $this->Template->markets $objTemplate->parse();
        } 
    Und jetzt noch das Template
    HTML-Code:
        <?php foreach ($this->wertpapier as $market): ?>
    
        <ul class="result_min">
            <li>
                <div class="title"><?= $market['title_short']; ?><?= $market['course']; ?> <?= date($GLOBALS['TL_CONFIG']['dateFormat'], $market['date']); ?></div>
            </li>
        </ul>
    
        <?php endforeach; ?>
    Kann mir bitte jemand helfen?
    Geändert von m-werk (10.04.2018 um 12:30 Uhr)
    LG, Andi

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

    Standard

    Zitat Zitat von m-werk Beitrag anzeigen
    Dieses holt die Kurse aus der Datenbank
    PHP-Code:
    class MarketCourseModel extends \Model
    {
        
    /**
         * Table name
         * @var string
         */
        
    protected static $strTable 'tl_market_course';
        
        public static function 
    findAMostRecentPublished($wid)
        {
            
    $t = static::$strTable;
            
    $arrColumns = array("$t.wid=?");
            
    $arrOptions = array('order' => "$t.date desc"'limit'=>1); 
                    
            return static::
    findBy($arrColumns$wid$arrOptions);
        } 
    und dann anstelle

    PHP-Code:
    $result_course = \MarketCourseModel::findAllByPublished($wertpapier_result->id); 
    die neue Methode

    PHP-Code:
    $result_course = \MarketCourseModel::findMostRecentPublished($wertpapier_result->id); 
    verwenden.

    Bei der Gelegenheit: die Methodennamen mit Published kommen mir etwas komisch vor, denn Du püfst nirgends, on etwas published ist. Und den optionalen Parameter $arrOptions ignorierst Du auch immer.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Hallo

    Danke für die Info. Dies klappt prima.

    die Methodennamen mit Published kommen mir etwas komisch vor, denn Du püfst nirgends, on etwas published ist.
    Doch, beim 1. Code wird es geprüft. Beim 2. hast recht, dort hab ich kein Pubished.

    Und den optionalen Parameter $arrOptions ignorierst Du auch immer.
    Ja, ich hab dies aus einem anderen Code herangezogen. Ist schon bereinigt.
    LG, Andi

  4. #4
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Nun komm ich jetzt schon zum finale, wo ich noch probleme habe.

    Ich hab jetzt ein 2. Model gebaut, wo ich von einem Wertpapier die letzten beiden Kurse habe. Dies möchte ich jetzt berechnen.

    Ich möchte den Kurs vom Array0 / Kurs vom Array1 * 100 berechnen.

    So sieht nun mein Modul aus:
    PHP-Code:
    $result_wertpapier = \MarketPriceModel::findAllByPublished($offset$limit);    
            foreach (
    $result_wertpapier as $wertpapier_result)
            {
                
    $result_course = \MarketCourseModel::findMostRecent($wertpapier_result->id);
                
    $result_percent = \MarketCourseModel::findMostRecentSeccond($wertpapier_result->id);
                
                foreach(
    $result_percent as $percent_result)
                {
                    
    $percent[] = array
                    (
                        
    'share_percent'        =>specialchars($percent_result->share),
                        
    'date_percent'        =>$percent_result->date,        
                    );
                }
                
                foreach(
    $result_course as $course_result)
                {
                    
    $market[] = array
                    (
                        
    'title'         => specialchars($wertpapier_result->title),
                        
    'title_short'     => specialchars($wertpapier_result->title_short),
                        
    'course'        => specialchars($course_result->share),
                        
    'date'            => $course_result->date,
                        
    'test'            => specialchars($percent_result->wid),
                    );
                }
            } 
    Es geht hier um das $percent_result.

    Wenn ich im Template nur das $percent mir anzeigen lasse, sieht es so aus:
    Code:
    Array
    (
        [0] => Array
            (
                [share_percent] => 15,76
                [date_percent] => 1523224800
            )
    
        [1] => Array
            (
                [share_percent] => 15,75
                [date_percent] => 1522879200
            )
    )
    Das sind genau die beiden Daten zu einem Wertpapier. Array0 ist aktuell, Array1 ist alt. Ich stell mir jetzt nur noch die Frage, wie ich in diesem Foreach dies berechnen kann.

    Ich hab jetzt zwar was probiert, aber das Ergebnis wirft mir 0,00 raus bei jedem Wertpapier
    PHP-Code:
                foreach($result_percent as $percent_result)
                {
                    
    $percent[] = array
                    (
                        
    'share_percent'        =>specialchars($percent_result->share),
                        
    'date_percent'        =>$percent_result->date,        
                    );
                    
                    
    $percent_ergebnis number_format((($percent[0]['share_percent']/$percent[1]['share_percent'])*100)-100,2',''.');
                }
                
                foreach(
    $result_course as $course_result)
                {
                    
    $market[] = array
                    (
                        
    'title'         => specialchars($wertpapier_result->title),
                        
    'title_short'     => specialchars($wertpapier_result->title_short),
                        
    'course'        => specialchars($course_result->share),
                        
    'date'            => $course_result->date,
                        
    'test'            => $percent_ergebnis,
                    );
                } 
    Aber die Berechnung müsste ja stimmen, nur wie gelangt diese dann in den $market[]?
    Geändert von m-werk (10.04.2018 um 08:15 Uhr)
    LG, Andi

  5. #5
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    So, zwar scheint mir das ganze nicht ganz Sauber zu sein, aber ich hab es gelöst.
    LG, Andi

  6. #6
    Contao-Nutzer
    Registriert seit
    23.08.2013.
    Beiträge
    87

    Standard

    Nutze Namespaces!

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
  •