Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Per Zufall einen Beitrag aus xml Feed!?

Einklappen

Neue Werbung 2019

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

  • Eistee87
    hat ein Thema erstellt [Erledigt] Per Zufall einen Beitrag aus xml Feed!?.

    [Erledigt] Per Zufall einen Beitrag aus xml Feed!?

    Hallo Community,

    ich habe folgendes Script,
    aus welchem ich jetzt per Zufall nur einen Beitrag anzeigen lassen möchte:

    PHP-Code:

    <?
      if(!isset($_GET['page'])) {$_GET['page'] = 1;}
      $page = $_GET['page'];   
      $xmlsrc = "comments.xml";
      $xml = simplexml_load_file($xmlsrc);
      $counted = count($xml); 
      function getComments(){
        global $page;
        global $xmlsrc;
        global $xml;
        $pagination = 3; // Number of posts on page
        $i = 0; // comments index   
        foreach ($xml->comment as $comment) {
          ++$i;       
          if( (($page-1)*$pagination) < $i && $i <= ($page*$pagination) ) { // match page number to comments we want to show
            $gravatar_img = 'http://www.gravatar.com/avatar/?gravatar_id='.md5(strtolower($comment->email)).'&amp;default=monsterid&amp;size=75'; // get gravatar img for each email   
                echo '
              <div class="commentwrap">
                      <img class="gravatar" width="175" height="175" title="Copyrights by '.htmlspecialchars($comment->copyrights).'" src="'.htmlspecialchars($comment->bild).'" />
                      <div class="author"><h3>';
                        if($comment->email != "") {echo '<a href="index.php">'.htmlspecialchars($comment->dingsbums).'</a>';} // check if author supplied email - if so, show mailto: link
                        else { echo htmlspecialchars($comment->dingsbums); }; // else show only name 
                      echo '</h3></div>
                      <div class="comment"><br />Richtig: '.nl2br(htmlspecialchars($comment->richtig)).'<br />  Falsch 1: '.nl2br(htmlspecialchars($comment->falsch1)).'<br />  Falsch 2: '.nl2br(htmlspecialchars($comment->falsch2)).'<br />  Falsch 3: '.nl2br(htmlspecialchars($comment->falsch3)).'<br /><br />  <a href="'.htmlspecialchars($comment->link).'" target="_blank">Link zum DingsBums</a> </div>' // strip HTML - but preserve line breaks 
              .'</div>';
          } else {
              if($i > ($page*$pagination)) { // add next page link (if more comments exist)
                 echo "<a class=\"pageplus\" href=\"?page="; echo $page+1; echo "#comments\">Newer comments &raquo;</a>"; break; 
               } // end next page link
          }  
        }  // end foreach 
        if ($page > 1) {echo "<a class=\"pageminus\" href=\"?page="; echo $page-1; echo "#comments\">&laquo; Older comments</a>"; } // add link to previous pages (if not on page 1)
    } // end getComments
    ?>
    Die Pagination wird allerdings nicht mehr benötigt.
    Wollte Euch den Code nur möglichst unverfälscht posten.

    Bin mit meinen Ideen am Ende
    Wäre für Hilfe sehr Dankbar da ich nicht weiß wo ich da was ansetzen könnte

  • rkr
    antwortet
    Keine Ahnung. Sowas?

    PHP-Code:
    <?php
    $data 
    = <<<XML
    <?xml version="1.0"?>
    <test>
        <x a="1">
            <x a="2">
                <x>
                    <y>y31</y>
                    <y>y32</y>
                </x>
            </x>
        </x>
        <x a="1">
            <x a="2">
                <y>y21</y>
                <y>y22</y>
            </x>
        </x>
        <x a="1">
            <y>y11</y>
            <y>y12</y>
        </x>
        <x>
            <y>y03</y>
            <y>y04</y>
        </x>
    </test>
    XML;

    $doc = new DOMDocument();
    $doc->loadXML($data);
    $xpath = new DOMXPath($doc);
    $nodes = [];
    foreach(
    $xpath->query('/*/x') as $node) {
        
    $nodes[] = $node;
    }
    shuffle($nodes);
    foreach(
    $nodes as $node) {
        
    printf("%s\n"$xpath->evaluate('string(.//y[1]/text())'$node));
    }

    Einen Kommentar schreiben:


  • Eistee87
    antwortet
    EDIT:
    Gerade hinbekommen.
    Trotzdem Danke!

    Einen Kommentar schreiben:


  • rkr
    antwortet
    Du hast deine Frage nicht vernünftig formuliert. Ich würde dir ja gerne einen Tipp geben, aber gerade bekomm' ich das nicht hin.

    Einen Kommentar schreiben:


  • Eistee87
    antwortet
    Das kostet mich schon seit Stunden nerven
    aber besten Dank!

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Lies die XML, form sie in ein natives PHP array und cache&benutze das. XML ist "teuer".

    Einen Kommentar schreiben:


  • Eistee87
    antwortet
    Nein es existiert nur eine XML Datei,
    dass soll auch so bleiben.

    Eine XML Datei besteht aus zB 100 Einträgen.
    Aus diesen 100 Einträgen möchte ich per Zufall einen einzigen Beitrag
    auf der Webseite angezeigt bekommen

    EDIT
    Meine Beispiel XML Datei war nur gekürzt
    weil ich nicht unnötig Ellenlang schreiben wollte

    Einen Kommentar schreiben:


  • jspit
    antwortet
    Zitat von Eistee87 Beitrag anzeigen
    Die Einträge sind alle genau so aufgebaut nur mit verschiedenen Inhalten
    Verstehe ich das richtig, du möchtest nicht aus einer XML einen zufälligen Eintrag rausfischen sondern eine XML von mehreren gleichartig aufgebauten XML und die dortigen Einträge verarbeiten?

    Einen Kommentar schreiben:


  • Eistee87
    antwortet
    Zitat von rkr Beitrag anzeigen
    Genau, deswegen ja meine Frage. Damit kann ich nichts anfangen.
    Hab davon kaum Ahnung,
    daher check ich auch grad nicht was Du genau brauchst.
    Die Einträge sind alle genau so aufgebaut nur mit verschiedenen Inhalten

    Einen Kommentar schreiben:


  • rkr
    antwortet
    Genau, deswegen ja meine Frage. Damit kann ich nichts anfangen.

    Einen Kommentar schreiben:


  • Eistee87
    antwortet
    Zitat von rkr Beitrag anzeigen
    Kannst du mal eine BeispielXML-Datei posten, wo man auch irgendwas per Zufall auslesen könnte?
    Zitat von Eistee87 Beitrag anzeigen
    Das ist die .xml

    PHP-Code:

    <?xml version="1.0"?>
    <xml>
    <comment time="1404208486">
    <dingsbums>NAME</dingsbums>
    <bild>BILD</bild>
    <copyrights>COPY</copyrights>
    <link>http://www.blabla.de</link>
    <richtig>NAME</richtig>
    <falsch1>NAME</falsch1>
    <falsch2>NAME</falsch2>
    <falsch3>NAME</falsch3>
    </comment>
    </xml>

    Einen Kommentar schreiben:


  • rkr
    antwortet
    Kannst du mal eine BeispielXML-Datei posten, wo man auch irgendwas per Zufall auslesen könnte?

    Einen Kommentar schreiben:


  • Eistee87
    antwortet
    Vielen Dank für die Antworten!
    Leider weiß ich nicht wo ich was einsetzen muss

    Einen Kommentar schreiben:


  • chorn
    antwortet
    Das XML passt doch garnicht zur Problemstellung. Und wo sind deine eigenen Versuche? Ich hab doch ein Beispiel gepostet.

    Einen Kommentar schreiben:


  • WTB
    antwortet
    Sicher nicht optimal, aber müsste doch funktionieren:

    Der von dir gepostete Code funktioniert ja so weit ichs verstanden habe, also
    könntest du da doch anstatt die Kommentare per echo auszugeben sie in ein
    Array packen, das am Ende per [MAN]shuffle[/MAN] durchmischen und dann nur
    das erste (dann zufällige) Element ausgeben.

    Einen Kommentar schreiben:

Lädt...
X