foreach Ausgabe in Variable sammeln??

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • foreach Ausgabe in Variable sammeln??

    Hm erstmal Hallöle an die nette Runde hier,
    ganz schon mächtig gewaltig Egon, steckt sehr viel Arbeit drinn. Respekt!

    Bin PHP lernwütig und seh wie ihr das wahrscheinlich öfters hört den Wald vor lauter Bäumen nicht mehr:

    Das Schnipselchen hab ich vor nem Jahr gebastelt und soll eine art content->view converter sein wo es als default eine short overview ansicht gibt und bei wunsch mehr (full article). Das könnte für news oder jede art von redaktionellem content einer php seite dienlich sein und soll grundlage für das auslesen meiner texte für webseiten sein. Dieses tool würde ermöglichen, daß alle artikel auf gleiche art und weise in jedem menu bedingt durch den dazugehörigen dateiverweis (txt oder my SQL DB) dargestellt werden.

    PHP-Code:
    function getarticle() {

    if(
    $action == 'full') {

        
    $article                     =     file("$dateiverweis".txt");
        
    $article                     =     array_reverse($article);
        
        
    $msg                         =     trim($article[$id]);
        
    $pieces                     =     explode("|"$msg);

        
    $articledate                 =     htmlentities($pieces[0], ENT_QUOTES"ISO-8859-1");
        
    $articletitle                 =     htmlentities($pieces[1], ENT_QUOTES"ISO-8859-1");
        
    $articlemsg                 =     htmlentities($pieces[2], ENT_QUOTES"ISO-8859-1");
                                        
        echo    
    "<tr><td width=\"99%\" align=\"justify\">" 
                                        
    $articledate "&nbsp;<b>" 
                                        
    $articletitle "</b>&nbsp;|&nbsp;" 
                                        
    $articlemsg 
                                        
    "&nbsp;... <a href=\"$PHP_SELF\">back</a><br><br></td></tr>";                            
    } else {

        
    $article                     =     file("$dateiverweis".txt");
        
    $article                     =     array_reverse($article);

        
    foreach(
    $article as $key => $msg) {
        
        
    $msg                         =     trim($msg);
        
    $pieces                     =     explode("|"$msg);
        
        
    $articledate                 =     htmlentities($pieces[0], ENT_QUOTES"ISO-8859-1");
        
    $articletitle                 =     htmlentities($pieces[1], ENT_QUOTES"ISO-8859-1");
        
    $articlemsg                 =     htmlentities($pieces[2], ENT_QUOTES"ISO-8859-1");
        
    $articlepreview                 =     substr($articlemsg0strpos($articlemsg"."0));
        
        echo    
    "<tr><td width=\"99%\" align=\"justify\">" 
                                        
    $articledate "&nbsp;<b>" 
                                        
    $articletitle "</b>&nbsp;|&nbsp;" 
                                        
    $articlepreview 
                                        
    "&nbsp;... <a href=\"$PHP_SELF?action=full&id=$key\">more</a><br><br></td></tr>";
                                        
            }
        }


    Soweit ganz schön und klappt auch wenn ichs als include() laufen lasse. Tja nun will ich aber die Ausgabe in einer Variable haben, damit ich mit dem tpl parser den ich gebaut hab arbeiten kann ({display} => $display). Davon abgesehen ist der Sinn ja dass man das script nur einmal schreibt und an einem Ort ändert und nicht an hunderten. Im ersten Teil des Scripts kein Problem, aber im letzteren schon. Denn es wird ein Arry über foreach ausgelesen. Da kann ich nich einfach das echo mit $display = ersetzen, denn dann würde man als Ergebnis wenn überhaupt nur ein Datensatz des Arrays gespeichert bekommen. Vor foreach die $display = setzen geht auch nicht, habs probiert (hehe, probiern kann manchmal auch helfen). Dann kam ich auf die Idee das ganze als function zu tarnen und im tpl_parser index wo die platzhalter gegen die auszuführenden Variablen ersetzt werden den ballon hoch gehn zu lassen , aber dat geht au net!! AAAARRRG

    Da ich Newbie bin überseh ich wahrscheinlich den Denkansatz. Ich bitte um kleine Hinweise für einen Verzweifelten. Vielen vielen Dank

    Willy_Lernen

    PS: Also, der Kasus Knaktus liegt für mich auf jeden Fall in der Frage: wie kann man die Ausgabe von foreach, also das "echo" komplett als String in einer Variable speichern, oder?
    Zuletzt geändert von Willy_Lernen; 25.10.2004, 14:43.
    Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

  • #2
    PHP-Code:

    $var 
    '';
    foreach(
    abc){

    $var .= 'inhalt';

    }

    echo 
    $var
    mfg
    marc75

    <Platz für anderes>

    Kommentar


    • #3
      Hui , 1000 dank für die schnelle antwort...

      Nur damit ich das checke was du da geschrieben hast: der punkt "." vor dem "=" ist quasi der hinweis für php etwas zu der avriable $var hinzuzufügen wodurch dann alle foreach durchgänge berücksichtigt werden? hab ich das richtig verstanden?
      Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

      Kommentar


      • #4
        hab es ausprobiert und es klappt!! 1000 dank nochmal. ich denke der punkt gehört bestimmt eigentl. zum basiswissen und stellt sowas wie das "$++" dar, richtig? das zeigt wieder mal, dass man im "home"-studium kein profi an der seite hat, der einem sagt, wenn man für eigene Verhältnisse zu weit rausgeschwommen ist. Danke dir nochmal für die schnelle Antwort.

        BTW: Dass das mit dem "show full" link jetzt nicht mehr funktioniert, scheint daran zu liegen, dass ich mit dem script auf der 100. ebene liege und wenn die seite sich neu aufbaut der ?action= befehl wirkungslos ist. Mal sehen ob ich das selber irgendwie hinkrieg. Anbsonsten nerv ich nochmal ...


        ganz lieben dank,
        Willy_Lernen
        Zuletzt geändert von Willy_Lernen; 25.10.2004, 15:28.
        Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

        Kommentar


        • #5
          @ marc 75: Sorry für meine Beharrlichkeit, aber ... ----> Hilfe!

          irgendwie überträgt das ganze die ?action&id=$key nicht. Kannst du mir nochmal einen tip geben? Beim ersten Aufruf wird der inhalt des preview arrays richtig dargetellt nur wenn ich dann "full" drücke wird die selbe ansicht nochmal angezeigt ??? und nicht wie ich es schon mal auf dem include prinzip primitiv getestet hatte, wo dann tatsächlich (wie erwünscht) nur der content des array id's dargestellt wird. jeder rat kommt mir gelegen:

          details:
          -- index.php -->

          PHP-Code:
          <?php
          session_start
          ();

          if (isset(
          $_SESSION['title'])) {
              include(
          'tpl_parse.inc.php');
              include(
          'tpl_article.inc.php');
          } else {
              require_once(
          'index_engine.inc.php');
              include(
          'tpl_article.inc.php');
              include(
          'tpl_parse.inc.php');
          };

          $page = new Page('tpl.inc.php');

          $page->replace_tags(array(

          'linkself'             =>         $_SESSION['linkself'],
          'linkalt'             =>         $_SESSION['linkalt'],
          'nav'                 =>         $_SESSION['nav_root'],
          'title'             =>         $_SESSION['title'],
          'language_hinweis'    =>        $_SESSION['lg_txt'],
          'htmllang'            =>        $_SESSION['lg1'][0],
          'display'           =>      $_SESSION['display'],

          'ctitle'             =>         $_SESSION['ctitle'],
          'task1'                =>         $_SESSION['task1'],
          'task2'                =>         $_SESSION['task2'],
          'action'            =>         $_SESSION['action'],
          'banner1'            =>         $_SESSION['banner1'],
          'banner2'            =>         $_SESSION['banner2'],

          'footer'             =>         $_SESSION['footnote'],
          'mail1'                =>        $_SESSION['mail1'],
          'mail2'                =>        $_SESSION['mail2'],
          'formmail'            =>        $_SESSION['formmail'],
          'info'                =>        $_SESSION['site_data'],
          'style'                =>        $_SESSION['style'],
          'news'                =>        $_SESSION['news']
          ));

          $page->output();
          ?>
          -- tpl_parse.inc.php -->

          PHP-Code:
          <?php
          session_start
          ();

          class 
          Page {

          var 
          $page;

          function 
          Page($template 'tpl.inc.php') {
              if (
          file_exists($template))
                  
          $this->page join(''file($template));
              else
                  die(
          "Template file $template not found.");
          }


          function 
          parse($file) {
              
          ob_start();
              include(
          $file);
              
          $buffer ob_get_contents();
              
          ob_end_clean();
          return 
          $buffer;
          }



          function 
          replace_tags($tags = array()) {
              if(
          sizeof($tags>0))
                  foreach (
          $tags as $tag => $data) {
                      
          $data = (file_exists($data)) ? $this->parse($data) : $data;
                      
          $this->page eregi_replace('<!-- {' $tag '} -->'$data$this->page);
                      }
              else
                  die(
          "No Content");
          }

          function 
          output() {
          print(
          $this->page);
          }

          }
          ?>
          -- index_engine.inc.php -->

          legt nur variablen wie impressum, title und andere daten die aus dem header und der domain adresse generiert werden fest.

          -- tpl_article.inc.php -->

          PHP-Code:
          <?php
          session_start
          ();
          if(
          $action == 'full') {

              
          $article                     =     file("news" ".txt");
              
          $article                     =     array_reverse($article);
              
          $_SESSION['display']        =    "";
              
              
          $msg                         =     trim($article[$id]);
              
          $pieces                     =     explode("|"$msg);

              
          $articledate                 =     htmlentities($pieces[0], ENT_QUOTES"ISO-8859-1");
              
          $articletitle                 =     htmlentities($pieces[1], ENT_QUOTES"ISO-8859-1");
              
          $articlemsg                 =     htmlentities($pieces[2], ENT_QUOTES"ISO-8859-1");
                                              
              
          $_SESSION['display']        =    "<tr><td width=\"99%\" align=\"justify\" id=\"bg2\">" 
                                              
          $articledate "&nbsp;<b>" 
                                              
          $articletitle "</b>&nbsp;|&nbsp;" 
                                              
          $articlemsg 
                                              
          "&nbsp;... <a href=\"$PHP_SELF\">back</a><br><br></td></tr>";                            
          } else {

              
          $article                     =     file("news" ".txt");
              
          $article                     =     array_reverse($article);
              
          $_SESSION['display']        =    "";
              
          foreach(
          $article as $key => $msg) {
              
              
          $msg                         =     trim($msg);
              
          $pieces                     =     explode("|"$msg);
              
              
          $articledate                 =     htmlentities($pieces[0], ENT_QUOTES"ISO-8859-1");
              
          $articletitle                 =     htmlentities($pieces[1], ENT_QUOTES"ISO-8859-1");
              
          $articlemsg                 =     htmlentities($pieces[2], ENT_QUOTES"ISO-8859-1");
              
          $articlepreview                 =     substr($articlemsg0strpos($articlemsg"@@"0));
              
              
          $_SESSION['display']    .=    "<tr><td width=\"99%\" align=\"justify\" id=\"bg2\">" 
                                              
          $articledate "&nbsp;<b>" 
                                              
          $articletitle "</b>&nbsp;|&nbsp;" 
                                              
          $articlepreview 
                                              
          "&nbsp;... <a href=\"$PHP_SELF?action=full&id=$key\">more</a><br><br></td></tr>";
              }
          }
          ?>
          -- tpl.inc.php -->

          selbsterklärend (enthält html code mit platzhaltern u.a. für $display)

          -- details ENDE --


          Hab überprüft ob $action beim erneuten durchlauf im tpl_article,inc.php script ankommt. tuts leider nicht ....

          kann mir bitte bitte bitte jemand sagen wo mein denkfehler ist oder einen ansatz geben???


          vielen dank, Willy_Lernen



          PS: merkwürdig ist auch das seitdem ich das nicht mehr über include() machen kann der $articlepreview text nicht dargestellt wird, sondern nur der anfang und der rest der ausgabe (dachte es könnte an der substr() ecke liegen, doch da hab ich nix geändert)
          Zuletzt geändert von Willy_Lernen; 25.10.2004, 16:40.
          Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

          Kommentar


          • #6
            register_global = off ???

            suche mal nach $_GET $_POST usw.


            zur Fehlersuche, in den ifs und else auch mal testausgaben einbauen.

            beispiel: echo 123;


            und mit print_r($_GET); schauen was alles im array drin ist.
            mfg
            marc75

            <Platz für anderes>

            Kommentar


            • #7
              globals off kann eigentl. nich sein sonst würd er ja $_SESSION nich mit nehmen oder?
              Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

              Kommentar


              • #8
                10000000000000000 Dank!!!
                danke dir für den tip mit $_GET.

                Meine php Kenntnisse waren etwas veraltet. mit $_GET hab ich sie jetzt erfolgreich rübergeholt. klappt allet, nur html entities() leider nicht mehr, hahahahaha ...... es ist echt verhext. wenn das eine problem läuft kommt das nächste. und jedes mal weiß ich nicht wo ich anfangen soll.

                Warum funktioniert denn htmlentities nun wieder nicht mehr ??? das hatte doch alles mal geklappt??

                bin total verwirrt.

                Lieben Gruß
                Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

                Kommentar


                • #9
                  oh mann!!! ich bin so däääämlich!!!!!!!

                  bbedit problem, der text war nicht richtig konvertiert! muss auf html stehen damit .txt files mit html_entities richtig ausgelesen werden ...

                  ok , dennoch danke nochmal für die hilfe.

                  Lieben Gruß WL
                  Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

                  Kommentar

                  Lädt...
                  X