2009-05-14 2 views
0

Ich arbeite an einem neuen CMS für repeative Projekte. Im Grunde genommen verbindet sich dieser Codeabschnitt mit einem Server, erfasst alle Namen der Tabellen und generiert daraus eine einfache Navigation. Es funktioniert ziemlich gut für das, was ich brauche, aber ich frage mich nur, ob ich dieses Code-Sniplet vielleicht noch mehr optimieren und es noch einfacher machen kann. Vielleicht eine Klasse erstellen, die die Formatierung anpassen könnte? Etc. Ich habe versucht, dies so "blank" wie möglich zu machen.Kann ich dieses PHP-Skript weiter optimieren, um ein dynamisches Nav aus der MySQL-Datenbank zu generieren?

Das einzige, was ich erklären möchte, ist, dass es überprüft, ob der Tabellenname nicht "includes" ist. Dies ist eine Standardtabelle, die mein CMS verwendet, um zu wissen, welche Daten am Frontend angezeigt werden soweit Daten.

<?php 

       echo '<div class="dynamic_nav_head">Navigation</div>'; 
       echo '<div class="dynamic_nav">'; 
       include('data.php'); 
       $tables = mysql_list_tables($database); 
        while (list($table) = mysql_fetch_row($tables)) { 
          if($table!='includes'){ 
         echo "<div class='cat'>".ucwords($table)."</div>"; 
           echo "<div class='cat_item'>"; 
           echo "<a href='?page=read&section=".$table."'>View " . ucwords($table) . "</a>"; 
           echo "</div>"; 
         echo "<div class='cat_item'>"; 
           echo "<a href='?page=add&section=".$table."'>Add New ". ucwords($table) ."</a>"; 
           echo "</div>"; 
          } // End If not in Includes. 
        } // End While 
       echo '</div>'; 
?> 

Irgendwelche Vorschläge, wie ich diesen Code noch schlanker, sauberer und schneller machen kann? Danke im Voraus!

Edit: MySQL Version: 4.1.22

Antwort

0

Ich schlage vor, Sie http://refactormycode.com/

 echo '<div class="dynamic_nav_head">Navigation</div><div class="dynamic_nav">'; // on less echo 
     include('data.php'); 
     $tables = mysql_list_tables($database); 
      while (list($table) = mysql_fetch_row($tables)) {  
        if($table!='includes'){ 
          $ucTable= ucwords($table); // just one function call 
          // just one echo; 
          // you where also using quotes and double quotes backwards 

          echo '<div class="cat">'.$ucTable.'</div><div class="cat_item"><a href="?page=read&section='.$table.'">View ' .$ucTable.'</a></div><div class="cat_item"><a href="?page=add&section='.$table.'">Add New '. $ucTable .'</a></div>'; 
        } // End If not in Includes. 
      } // End While 
     echo '</div>'; 
+0

Eigentlich nimmt Echo mehrere Parameter, also sollten Sie alle .s im Echo auf Kommas ändern . Es gibt keinen Grund, die Zeichenfolge zu konkludieren, bevor sie an den Ausgabepuffer gesendet wird. – jmucchiello

0

Wie wissen Sie den Code langsam ist? Was sagt Ihr Profiler über den Code? Welche Aussage verlangsamt es? Auf welcher Plattform bist du? Welche Version von MySQL? Wie viele Tabellen enthält dieser Katalog? Leiden Sie unter vorzeitiger Optimierung?

+0

Ich habe diesen Code jetzt für eine Weile verwendet und es funktioniert gut für kleinere Datenbanken mit 10-14 Tabellen von Daten (normalerweise als Abschnitte einer Seite verwendet), aber ich habe gerade eine Website mit 80 oder so Tabellen und es begann zu verzögern ein bisschen über die Hälfte der Seite. Gibt es eine bessere Lösung? Wäre ein Skript, das gerade alle Tabellennamen in eine andere separate Tabelle geladen hat, schneller? Wäre es für eine kleine Anzahl von Tabellenseiten gegen den obigen Code? Danke für die schnelle Antwort! – stogdilla

+0

Ich bin mir fast sicher, dass dieser Teil schnell genug ist. Es hört sich eher so an, als hätte der Browser Probleme damit, es zu rendern: "(...) es kam etwas nach unten auf der Seite" – stefs

0

Der Code ist nicht schlecht zu besuchen. Eine Verbesserung für die Lesbarkeit wäre auch, ein Array aus der Datenbank zu erstellen, anstatt mysql_fetch_row innerhalb des 'while' Konstrukts zu haben. Dadurch können Sie auch die unerwünschten Namen herausfiltern, bevor Sie in die Schleife wechseln. Sie könnten auch die ucwords-Methode auf dem Array abbilden, so dass Sie dies aus dem while-Schleifenkonstrukt herausnehmen können. Der Punkt über die doppelten Anführungszeichen ist ein gültiger, aber ich würde separate Echo-Anweisungen für die Lesbarkeit behalten, da dies hier keinen nennenswerten Unterschied machen wird.

Hoffe, dass hilft.

Verwandte Themen