Ankündigung

Einklappen
Keine Ankündigung bisher.

Kompletten Skript mehrfach aufrufen innerhalb eines anderen Skripts?

Einklappen

Neue Werbung 2019

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

  • Kompletten Skript mehrfach aufrufen innerhalb eines anderen Skripts?

    Hallo zusammen,

    habe rudimentäre Kenntnisse in php und habe noch keinen Überblick über gewissen Sichtbarkeiten innerhalb eines Skriptes.

    Folgernder Aufbau eines Skriptes:

    PHP-Code:
    <?php
    define
    ()
    require
    use

    etliche Funktionen
    ?>
    <html>
    mein Content der auch Funktionen von php aufruft
    <script>
    js
    </script>
    </html>
    das ganze wird jetzt per include in einem anderen Skript geladen und logischerweise ausgeführt. Ich möchte das aber mehrfach ausführen per For-Scheife aber wie? Jetzt hatte ich gedacht die Zeilen die den php-Code betreffen als komplette Klasse zu definieren aber das wirft mir nur Exceptions. Dann hatte ich nach define, require und use nur die Funktionen in eine Klasse gehüllt und die Klasse vor den Funktionen erzeugt. Lässt sich ausführen, aber der ganze HTML-Content wird ohne die Berechnungen der php-Funktionen angezeigt.

    Wie könnte ich das besser gestalten um an mein Ziel zu gelangen?

  • #2
    Moin,

    du musst schon etwas realistischer darstellen wie dein Code aussiehst, oder deine Frage genauer stellen.
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Der Script soll mehrmals aufgerufen werden:
      Code:
      <?php
      
      define('ROOTPATH', __DIR__);
      
      require ROOTPATH . '/vendor/autoload.php';
      
      use RecAnalyst\RecordedGame;
      use RecAnalyst\GameInfo;
      use RecAnalyst\BasicTranslator;
      use RecAnalyst\Utils;
      use RecAnalyst\ChatMessage;
      
      
      $filename = ROOTPATH . '/test.mgz';
      
      $locale = 'de';
      if ($argc > 1) {
          $locale = $argv[1];
      }
      
      $rec = new RecordedGame($filename, [
          'translator' => new BasicTranslator($locale)
      ]);
      
      $mapImage = $rec->mapImage()
          ->resize(300, 150)
          ->encode('data-url');
      
      
      function settingOfGame($rec){
          printf("<table id=gameSet>");
          printf("<tr><td id=settingCell>Version:</td><td>" . $rec->version()->name(). "</td></tr>");
          printf("<tr><td id=settingCell>Dauer:</td><td>" . Utils::formatGameTime($rec->body()->duration) . "</td></tr>");
          printf("<tr><td id=settingCell>Spielart:</td><td>" . $rec->gameSettings()->gameTypeName(). "</td></tr>");
          printf("<tr><td id=settingCell>Spielkarte:</td><td>" . $rec->gameSettings()->mapName(). "</td></tr>");
          printf("<tr><td id=settingCell>Startzeitalter:</td><td>" . $rec->pov()->startingAge() . "</td></tr>");
          printf("<tr><td id=settingCell>Kartengröße:</td><td>" . $rec->gameSettings()->mapSizeName() . "</td></tr>");
          printf("<tr><td id=settingCell>Einheitenlimit:</td><td>" . $rec->gameSettings()->getPopLimit() . "</td></tr>");
          printf("</table>");
      }
      
      function teamS($rec){
          $counter = 0;
          foreach ($rec->teams() as $team) {
              $counter++;
              printf("<table id=teamSet>");
              printf("<tr><th id=tdTeam>Team " . $counter . "</th></tr>");
              foreach ($team->players() as $player) {
                  printf("<tr>");
                  printf("<td id=tdTeam rowspan=2>");
                  $color = $player->colorId;
                  $civ = $player->civId;
                  $civIcon = '/ageoflan/recanalyst/vendor/recanalyst/recanalyst/resources/images/civs/'.$color.'/'.$civ.'.png';
                  printf("<img src=".$civIcon . ">  ");
                  printf("</td>");
      
                  printf("<td id=nameCell>");
                  printf($player->name);
                  printf("</td>");
                  printf("</tr>");
      
                  printf("<td>");
                  printf($player->civName());
                  printf("</td>");    
              }
      
              printf("</table>");
          }
      }
      
      function overallScore($rec){
          foreach ($rec->teams() as $team) {
              foreach ($team->players() as $player) {
                  printf("<tr>");
                  printf("<td id=nameCell>". $player->name . "</td>");
                  printf("<td>". $player->achievements()->military->score . "</td>");
                  printf("<td>". $player->achievements()->economy->score . "</td>");
                  printf("<td>". $player->achievements()->tech->score . "</td>");
                  printf("<td>". $player->achievements()->society->score . "</td>");
                  printf("<td>". $player->achievements()->score . "</td>");
                  printf("</tr>");
              }
          }
      }
      
      function miliScore($rec){
          foreach ($rec->teams() as $team) {
              foreach ($team->players() as $player) {
                  printf("<tr>");
                  printf("<td id=nameCell>". $player->name . "</td>");
                  printf("<td>". $player->achievements()->military->unitsKilled . "</td>");
                  printf("<td>". $player->achievements()->military->hitPointsKilled . "</td>");
                  printf("<td>". $player->achievements()->military->unitsLost . "</td>");
                  printf("<td>". $player->achievements()->military->buildingsRazed . "</td>");
                  printf("<td>". $player->achievements()->military->hitPointsRazed . "</td>");
                  printf("<td>". $player->achievements()->military->buildingsLost . "</td>");
                  printf("<td>". $player->achievements()->military->unitsConverted . "</td>");
                  printf("</tr>");
              }
          }
      }
      
      function ecoScore($rec){
          foreach ($rec->teams() as $team) {
              foreach ($team->players() as $player) {
                  printf("<tr>");
                  printf("<td id=nameCell>". $player->name . "</td>");
                  printf("<td>". $player->achievements()->economy->foodCollected . "</td>");
                  printf("<td>". $player->achievements()->economy->woodCollected . "</td>");
                  printf("<td>". $player->achievements()->economy->stoneCollected . "</td>");
                  printf("<td>". $player->achievements()->economy->goldCollected . "</td>");
                  printf("<td>". $player->achievements()->economy->tradeProfit . "</td>");
                  printf("<td>". $player->achievements()->economy->tributeSent . "</td>");
                  printf("<td>". $player->achievements()->economy->tributeReceived . "</td>");
                  printf("</tr>");
              }
          }
      }
      
      function techProgressScore($rec){
          foreach ($rec->teams() as $team) {
              foreach ($team->players() as $player) {
                  printf("<tr>");
                  printf("<td id=nameCell>". $player->name . "</td>");
                  printf("<td>". Utils::formatGameTime($player->feudalTime) . "</td>");
                  printf("<td>". Utils::formatGameTime($player->castleTime) . "</td>");
                  printf("<td>". Utils::formatGameTime($player->imperialTime) . "</td>");
                  printf("<td>". $player->achievements()->tech->mapExploration . "%%</td>");
                  printf("<td>". $player->achievements()->tech->researchCount . "(" . $player->achievements()->tech->researchPercent ."%%)</td>");
                  printf("</tr>");
              }
          }
      }
      
      function societyScore($rec){
          foreach ($rec->teams() as $team) {
              foreach ($team->players() as $player) {
                  printf("<tr>");
                  printf("<td id=nameCell>". $player->name . "</td>");
                  printf("<td>". $player->achievements()->society->totalWonders . "</td>");
                  printf("<td>". $player->achievements()->society->totalCastles . "</td>");
                  printf("<td>". $player->achievements()->society->relicsCaptured . "</td>");
                  printf("<td>". $player->achievements()->economy->relicGold . "</td>");
                  printf("<td>". $player->achievements()->society->villagerHigh . "</td>");
                  printf("</tr>");
              }
          }
      }
      
      function chat($rec){
          foreach ($rec->body()->chatMessages as $chat) {
          // Format the millisecond time as HH:MM:SS.
          $time = Utils::formatGameTime($chat->time);
          if ($chat->player) {
              //printf(" ". player->name . "<br/>");
              printf("[%s]", $time);
              printf("[%s]", $chat->player->name);
              printf("\t%s", $chat->msg);
          } else {
              printf("[%s] * %s\n", $time, $chat->msg);
              printf("false");
          }
          printf("<br/>");
          }
      }
      
      ?>
      
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <style>
      body {font-family: Arial;}
      
      /* Style the tab */
      .tab {
        overflow: hidden;
        border-width: 2px 2px 2px 2px;
        border-style: solid;
        border-color: #ccc;
        background-color: #ffe3c9;
        font-weight: bold;
      }
      
      /* Style the buttons inside the tab */
      .tab button {
        background-color: inherit;
        float: left;
        border: none;
        outline: none;
        cursor: pointer;
        padding: 14px 16px;
        transition: 0.3s;
        font-size: 14px;
        color: #000000;
      }
      
      /* Change background color of buttons on hover */
      .tab button:hover {
        background-color: rgba(224,129,21,0.51);
      }
      
      /* Create an active/current tablink class */
      .tab button.active {
        background-color: rgba(224,129,21,0.51);
      }
      
      /* Style the tab content */
      .tabcontent {
        display: none;
        padding: 6px 12px;
        border: 2px solid #ccc;
        border-top: none;
        //background-color: #ffe3c9;
        font-size: 14px;
      }
      
      th, td {
        font-size: 14px;
        border: 0px solid black;
      }
      
      table {
          font-size: 14px;
          border: 1px solid #ccc;
      }
      
      #tableSetting {
          border: 0px solid black;
      }
      
      #teamSet {
          width: 50%;
          height: 20px;
          //font-weight: bold;
          float: left;
          border: 0px solid black;
      }
      
      td#nameCell {
          width: 20%;
          font-weight: bold;
      }
      
      td#settingCell {
          text-align: right;
          font-weight: bold;
          width: 30%;
      }
      
      #gameSet {
          border: 0px solid black;
      }
      
      
      td#tdTeam, th#tdTeam {
          width: 17%;
          vertical-align: top;
          text-align: left;
      }
      
      #tableHeader {
          background-color: #ffe3c9;
          height: 50px;
          font-weight: bold;
      }
      
      </style>
      </head>
      <body>
      
          <div class="tab">
              <button class="tablinks" onclick="openTab(event,'Allgemein')" id="defaultOpen">Allgemein</button>
              <button class="tablinks" onclick="openTab(event,'Punktezahl')">Punktezahl</button>
              <button class="tablinks" onclick="openTab(event,'Militaer')">Militär</button>
              <button class="tablinks" onclick="openTab(event,'Wirtschaft')">Wirtschaft</button>
              <button class="tablinks" onclick="openTab(event,'Forschung')">Forschung</button>
              <button class="tablinks" onclick="openTab(event,'Gesellschaft')">Gesellschaft</button>
              <button class="tablinks" onclick="openTab(event,'Chat')">Chat</button>
          </div>
          <div id="Allgemein" class="tabcontent">
              <table id=tableSetting>
                  <tr>
                      <td><?php settingOfGame($rec) ?></td><td id=map><img src="<?= $mapImage ?>"></td>
                  </tr>
              </table>
              <table id=tableSetting>
                  <tr>
                      <td><?php teamS($rec) ?></td>
                  </tr>
              </table>
      
      
          </div>
          <div id="Punktezahl" class="tabcontent">
              <table>
                  <tr id=tableHeader>
                      <td id=nameCell>Spieler</td><td>Militär</td><td>Wirtschaft</td><td>Forschung</td><td>Gesellschaft</td><td>Total</td>
                          <?php overallScore($rec) ?>
                      </tr>
              </table>
          </div>
          <div id="Militaer" class="tabcontent">
              <table>
                  <tr id=tableHeader>
                      <td id=nameCell>Spieler</td><td>Einheiten getötet</td><td>E-HP abgezogen</td><td>Einheiten verloren</td><td>Gebäude vernichtet</td><td>G-HP abgezogen</td><td>Gebäude verloren</td><td>Einheiten konvertiert</td>
                          <?php miliScore($rec) ?>
                  </tr>
              </table>
          </div>
          <div id="Wirtschaft" class="tabcontent">
              <table>
                  <tr id=tableHeader>
                      <td id=nameCell>Spieler</td><td>Nahrung</td><td>Holz</td><td>Steine</td><td>Gold</td><td>Handel</td><td>Tribut gesendet</td><td>Tribut erhalten</td>
                          <?php ecoScore($rec) ?>
                  </tr>
              </table>
          </div>
          <div id="Forschung" class="tabcontent">
              <table>
                  <tr id=tableHeader>
                      <td id=nameCell>Spieler</td><td>Feudalzeit</td><td>Ritterzeit</td><td>Imperialzeit</td><td>Karte erkundet</td><td>Techs erforscht</td>
                          <?php techProgressScore($rec) ?>
                  </tr>
              </table>
          </div>
          <div id="Gesellschaft" class="tabcontent">
              <table>
                  <tr id=tableHeader>
                      <td id=nameCell>Spieler</td><td>Wunder gebaut</td><td>Burgen gebaut</td><td>Relikte gesammelt</td><td>Reliktgold</td><td>Maximale Dorfis</td>
                          <?php societyScore($rec) ?>
                  </tr>
              </table>    
          </div>
          <div id="Chat" class="tabcontent">
              <p><?php chat($rec) ?></p>
          </div>
      
      <script>
      // Get the element with id="defaultOpen" and click on it
      window.onload = function () {
          startTab();
      };
      
      function startTab() {
          document.getElementById("defaultOpen").click();
      }
      function openTab(evt, tabName) {
          var i, tabcontent, tablinks;
      
          tabcontent = document.getElementsByClassName("tabcontent");
          for (i = 0; i < tabcontent.length; i++) {
              tabcontent[i].style.display = "none";
          }
          tablinks = document.getElementsByClassName("tablinks");
      
          for (i = 0; i < tablinks.length; i++) {
              tablinks[i].className = tablinks[i].className.replace(" active", "");
          }
      
          document.getElementById(tabName).style.display = "block";
          evt.currentTarget.className += " active";
      }
      </script>
      
      </body>
      </html>

      Kommentar


      • #4
        Du kannst eine Datei mit include/require beliebig oft aufrufen und die wird dann halt auch immer wieder ausgeführt, du musst dir halt nur überlegen wie oft. Dafür musst du halt alles was nicht mehrmals aufgerufen werden soll an einer anderen Stelle ausserhalb machen. Besser wäre es aber, eine Klasse zu erstellen, die deine Logik wegabstrahiert und in der du dann die einzelnen Methoden die du brauchst mehrmals aufrufst.
        [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

        Kommentar


        • #5
          Soweit ich mich in dem Code oben zurechgefunden habe, wird nur vendor/autoload über require eingebunden.
          die ganzen style infos, das ganze js, macht es nicht einfacher sich da zurech zu finden.

          functionen für ausgaben bringt es halt gar nicht, tempalting wäre besser.

          Kommentar


          • #6
            Der Inhalt meines Codes ist auch eher unrelevant. Viel mehr ist das Konzept wichtig. Aber User chorn hat es für mich ganz gut zusammengefasst. Die Trennung meiner Logik und dieses als Klasse habe ich jetzt auch gemacht. Das Problem welches sich mir jetzt stellt, dass mein HTML Content an fixe ids gebunden ist und gleichzeitig die selben Funktionen aufruft. Jetzt gilt es heraus zu finden dies dynamisch zu machen.

            Kommentar


            • #7
              Das Problem welches sich mir jetzt stellt, dass mein HTML Content an fixe ids gebunden ist und gleichzeitig die selben Funktionen aufruft.
              html contet gebunden an php functionen finde ich keine gute möglichkeit.
              beim betrachten des codes oben, denke ich an template engine

              Kommentar


              • #8
                Zitat von tomBuilder Beitrag anzeigen

                html contet gebunden an php functionen finde ich keine gute möglichkeit.
                beim betrachten des codes oben, denke ich an template engine
                Ich danke dir für den Input aber ich kann mit dem Begriff Template Engine nur grob was anfangen. Ich komme aus der Backend-Programmierung und da orientiere ich mich an Design-Pattern. Der Code selber wird auf einer Wordpress-Seite ausgegeben, da stellt sich mir die Frage wie ich so etwas einbinde, wenn du sagst Template-Engine.

                Kommentar


                • #9
                  Wordpress selbst verwendet ja auch eine eigene Form einer Template engine, da solltest du dich mal näher mit der Doku dazu befassen.
                  sieh auch diesen Beitrag: https://krautpress.de/2017/themes-mi...ber-erstellen/

                  Kommentar


                  • #10
                    Zitat von Hades Beitrag anzeigen

                    Ich danke dir für den Input aber ich kann mit dem Begriff Template Engine nur grob was anfangen. Ich komme aus der Backend-Programmierung und da orientiere ich mich an Design-Pattern.
                    Sagen wir mal so.
                    Deine functionen machen alle <table> statt einer datenstructur.
                    alle datenstructuren könnten in einer function structureTo table(){} eine tabelle oder structureToFlexGrid(){} ein grid oder structureToDump(){} eine andere Ausgabe erzeugen.

                    Kommentar

                    Lädt...
                    X