XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   PHP-Skript für das Erzeugen einer unverschachtelten Navi (http://xhtmlforum.de/showthread.php?t=73451)

protonenbeschleuniger 21.03.2018 10:05

Zitat:

Zitat von AndreasB (Beitrag 552171)
Hier verstehe ich Dein Argument nicht. Warum würde durch eine zweispaltige Matrix im Gegensatz zu einer vierspaltigen Flexibilität zerstört?

In dem "vierspaltigen Array" gibt es doch total viel Wiederholung.
Soll denn sowas nicht möglichst vermieden werden, damit Code gut wartbar bleibt.

Nein. Das sind zwei unterschiedliche Punkte. Bei der Vermeidung von Codewiederhohlung geht es nicht um Daten, sondern um Programmcode und Wartbarkeit wird nicht durch Kürzung des Code erreicht.

Der Vorteil der benannten Parameter ist der, dass du erkennst was welcher Wert ist. Das ist hier unterstes Level, aber es zeigt worum es geht.

Zitat:

Zitat von AndreasB (Beitrag 552171)
HTML-Code:

['text' => 'Home', 'url' => '/'],
['text' => 'Neues', 'url' => '/neues'],
['text' => 'Foo', 'url' => '/foo']

ist doch weniger gut wartbar als
HTML-Code:

§[
        'text'  'url'
        'Home'  '/'       
        'Neues' '/neues'
        'Foo'  '/foo'

Sowas fände ich sehr gut wartbar/lesbar.

(Eigentlich gibt es keinen Grund Pseudocode zu fabrizieren, ich hatte dir den äquivalenten PHP Code schon gezeigt)

Inwiefern besser wartbar? woran erkennst du (in zwei Jahren) was die Werte bedeuten?

Microoptmierung ist der Beginn des Chaos. Nur weil du vielleicht 50 Bytes und 0.1µS Laufzeit sparst hast du nichts gewonnen.

Oder was machst du, wenn du das Array erweitern möchtest?
z.b. so
PHP-Code:

    $entries = array(
    [
'text' => 'home''url' => '/''title' => 'Startseite'],
    [
'text' => 'neues''url' => '/news''irgendetwas' => 'tu_was_anderes'],
    [
'text' => 'kontakt''url' => '/php/kontakt.php'],
    [
'text' => 'extern''url' => 'http://example.org/','class' => 'ext_link'],
    ); 


AndreasB 21.03.2018 10:31

@protonenbeschleuniger

Mir geht es in keiner Weise um "Mikroptimierung" oder "Performance" oder "Dateigrößen".

Mir ging es allein um die Lesbarkeit/Wartbarkeit von Programmiercode.

Mein fiktives Beispiel ist für meine Augen drastisch besser lesbar als Dein Array.

Aber vielleicht empfinden wir das einfach verschieden und lassen es so stehen.
Meine Vermutung war, dass es durchaus objektiv messbare Merkmale für Lesbarkeit von Code gibt.

Danke für Dein Beispiel mit der Erweiterbarkeit Deines Codes.

Das Konzept eines assoziativen Arrays habe ich noch nicht verstanden, das hole ich nach. Vorerst erscheint es mir etwas unübersichtlich, wenn "mittendrin" statt "ganz oben" neue Variablen (bei Deinem Beispiel "irgendwas" und "class") deklariert werden.

Wie auch immer. Das führt uns wohl zu weit, denn ich kann ja bei Konzepten/Syntax und Architektur von Programmiersprachen nicht mitreden.

Ich habe ja lediglich mal gesehen, wie schön Python-Code im Vergleich zu anderen Programmiersprachen meinem Auge erschien.

Es würde mir übrigens in unserer Konversation helfen, wenn Du manchmal sagen würdest "Andreas, ich verstehe Deinen Gedanken und finde die tabellarische Darstellung in Deinem fiktiven Code auch sehr gut lesbar, aber eine solche Schreibweise hat folgenden Nachteil für die Erweiterbarkeit ..."

So lese ich bei Dir vor allem implizit heraus "Andreas, was Dir vorschwebt ist völlig sinnloser Quatsch, ich kann in keiner Weise verstehen, wie Du darauf kommst."

protonenbeschleuniger 21.03.2018 10:55

Zitat:

Zitat von AndreasB (Beitrag 552178)
Mir geht es in keiner Weise um "Mikroptimierung" oder "Performance" oder "Dateigrößen".

Das ist aber der einzige Effekt deiner "Optimierung" und deine Fragen in anderen Threads deuten darauf hin, dass du ein grosses faible für Mikrooptimierung hast.

Und ich kann mich nur wiederholen, ich kenne das aus eigener Erfahrung. Es führt niemals zu besser lesbaren Code wenn man Code kürzt.

Zitat:

Zitat von AndreasB (Beitrag 552178)
Mir ging es allein um die Lesbarkeit/Wartbarkeit von Programmiercode.

Mein fiktives Beispiel ist für meine Augen drastisch besser lesbar als Dein Array.

Da sagt der erfahrene Programmierer: "du irrst dich".

Ich hatte dich aber konkret gefragt, was liest du aus dem Array? Ich sag es dir: Nichts!

Du weisst JETZT, dass das erste Element des Array der Text ist und das zweite die URL. Wenn noch weitere Eigenschaften hinzukommen, dann ist das dritte Element die Klasse, das vierte der Titel.

Weiter unten in der Funktion steht der eigentliche Programmcode und dort werden die Daten genutzt, das sähe dann mit deiner Version so aus:

PHP-Code:

printf('<li class="%s"><a href="%s" title="%s">%s</a></li>'$link[3], $link[1], $link[4], $link[0]); 

und das hälst du für besser lesbar als:
PHP-Code:

printf('<li class="%s"><a href="%s" title="%s">%s</a></li>'$link['class'], $link['url'], $link['text'], $link['title']); 

und wie gesagt, wir reden hier nur über einen 3 Zeiler. In einem etwas größeren Programm, wirst du deinen Codevariante schon nach wenigen Tagen hassen, weil du nichts mehr findest und die Erweiterbarkeit massiv erschwerst und am Schluss mehr aufgeblähten Code hast, als mit der anderen Variante.

Zitat:

Zitat von AndreasB (Beitrag 552178)
Danke für Dein Beispiel mit der Erweiterbarkeit Deines Codes.

Das Konzept eines assoziativen Arrays habe ich noch nicht verstanden, das hole ich nach. Vorerst erscheint es mir etwas unübersichtlich, wenn "mittendrin" statt "ganz oben" neue Variablen (bei Deinem Beispiel "irgendwas" und "class") deklariert werden.

Das sind keine neue Variabeln, sondern Eigenschaften. Und was du als Mittendrin bezeichnest, ist ein Beispiel für Flexibilität, diese Eigenschaften könnte es geben oder nicht. Die Anordnung ist dabei auch völlig Variabel.

Das Konzept des AA ist weit verbreitet und du hast es sicher verstanden, denn wendest es z.b.auch in HTML oder CSS schon massiv an.

HTML-Code:

p {
width:60%;
height:2em;
color:blue;
background-color:#fff
}

ist exakt das - ein assoziatives Array oder Hash - und wie oft kommt in deinem CSS color vor?
du behauptest hier, der Code wäre besser lesbar, wenn dort nur so was stehen würde:
HTML-Code:

p [60%, 2em, blue, #fff]
Wie gesagt, mit deinem ständigen Hinterfragen von Selbstverständlichkeiten wirst du nur sehr, sehr langsam vorwärts kommen.

protonenbeschleuniger 21.03.2018 10:59

Zitat:

Zitat von AndreasB (Beitrag 552178)
So lese ich bei Dir vor allem implizit heraus "Andreas, was Dir vorschwebt ist völlig sinnloser Quatsch, ich kann in keiner Weise verstehen, wie Du darauf kommst."

Naja, ist es auch. Aber ich habe bereits an etlichen Stellen geschrieben, dass ich deine Gedanken gut verstehe und früher teilweise auch selbst hegte. Das scheinst du überlesen zu haben oder du magst es nicht wahrnehmen.

Ich kann dir nur sagen, für mich ist das eine sachliche Diskussion. Auch wenn vieles Unsinn ist was du vorschlägst, aber ich kenne diese Gedanken, ansonsten würde ich mir die Mühe nicht machen dir zu erklären wo du falsch denkst.

chorn 21.03.2018 14:26

Zitat:

Zitat von AndreasB (Beitrag 552178)
Meine Vermutung war, dass es durchaus objektiv messbare Merkmale für Lesbarkeit von Code gibt.

Sehe ich genau so, unter meinen Top 10 sind dabei:

- Nachvollziehbarer Code mit rotem Faden
- durch: Logik im Code abspeichern, nicht im Gehirn
- durch: keine durchnummerierten Variablen - auch nicht als Array-Keys.

AndreasB 22.03.2018 07:37

@protonenbeschleuniger
Ich nehme sehr wohlwollend wahr, dass Du Dir die Zeit für Deine Antworten nimmst. Dafür danke ich Dir sehr.
Und Deine Kritik kommt an und wirkt. Ich brauche aber Zeit um das alles zu verarbeiten.

Durch Deine Beispiele zum assoziativen Array habe ich nun besser verstanden, was seine Vorteile sind. Eine Diskussion weiterer Details wäre unangebracht, dafür fehlen mir Programmierkenntnisse.

Ja, Du hast wohl auch Recht mit Deiner Kritik meines Hinterfragens in dieser Anfängerphase.

Du schriebst an anderer Stelle, dass Du eventuell ein minimalistisches Word-Theme schreiben wirst. Lasse es mich bitte wissen, falls es dazu kommt.

Vielen Dank an alle hier im Thread, auch für eure Geduld.

protonenbeschleuniger 22.03.2018 09:34

Zitat:

Zitat von AndreasB (Beitrag 552208)
Du schriebst an anderer Stelle, dass Du eventuell ein minimalistisches Word-Theme schreiben wirst. Lasse es mich bitte wissen, falls es dazu kommt.

"Dazu gekommen" war es schon, ich hatte nur keinen Zugriff bisher.

Also. Ein WP Theme besteht mindestens aus: style.css, index.php, header.php, sidebar.php, footer.php und einer functions.php

Diese muss du in ein Verzeichniss packen im Ordner ../wp-content/themes/ deiner WP Installation. Dann kannst du dieses Theme im Backend aktivieren und du hast dein simples Theme fast frei von unnötigen (du musst noch im Backend in den Nutzereinstellungen die Werkzeugleiste deaktivieren)

Hier die Dateien:

style.css

die CSS Deklarationen

HTML-Code:

/*
Theme Name: Simple
Theme URI: ....
Description: Ein einfaches WP Theme
Version: 1.0
Author: ....
Author URI: ....
*/
body {
        background-color: #fff;
        color: #000;
        font-family: 'Courier new', Courier, monospace;
}

index.php

steuert die Ausgabe der "Posts" (nicht der "pages")

PHP-Code:

<?php get_header(); ?>
<!-- Start: Index.php -->
<?php if (have_posts()) : while (have_posts()) : the_post();?>
<div class="post">
    <h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
    <?php the_content('[... weiterlesen]');?>
</div>
<?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
<!-- Ende: Index.php -->

<?php get_sidebar(); ?>

<?php get_footer(); ?>

header.php

der Ort der Meta Angaben

PHP-Code:

<!doctype html>
<html lang="de">
<head>
    <title><?php wp_title('');?> [<?php bloginfo('name');?>]</title>
    <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
    <meta name="description" content="<?php bloginfo('description'); ?>" >
    <link href="<?php bloginfo('stylesheet_url'); ?>"  title="Standard"  rel="stylesheet"  type="text/css">
</head>
<body>
<h1><a title="Startseite" href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1>

sidebar.php

hier wird das Menu erzeugt, dafür gibt es aber X-andere Möglichkeiten.

Die einfachste wäre das builtin Menü zu nutzen. Da bin ich aber kein Experte und weiss nicht, wie man dies möglichst einfach einbinden könnte. Daher hier die Methode die einfach nur die letzten 10 "posts" im Menü auflistet.

PHP-Code:

<!-- Start: sidebar.php -->
<div id="menu">

<div>
    <h2>Das Neuste</h2>
    <ul>
        <?php  
            wp_get_archives
('type=postbypost&limit=10'); 
        
?>
    </ul>
</div>

<?php if ( !dynamic_sidebar() ) : ?><?php endif; ?>

</div>
<!-- End:sidebar.php -->

footer.php

könnte man sich hier auch sparen. Aber wegen der Erweiterbarkeit und Flexibilität, wenn man wirklich ein komplettes Template machen will ist es sinnvoll.

PHP-Code:

<!-- (footer.php) -->
<?php wp_footer(); ?>
</body>
</html>

Dann benötigt man noch eine php Datei um unnötiges zu entfernen, da die vielen Millionen User z.b. gerne JQuery nutzen ist das per Default aktiviert. Das läßt sich aber entfernen:

PHP-Code:

<?php

// REMOVE EMOJI ICONS
remove_action('wp_head''print_emoji_detection_script'7);
remove_action('wp_print_styles''print_emoji_styles');

// Remove jQuery Migrate Script from header and Load jQuery from Google API
function crunchify_stop_loading_wp_embed_and_jquery() {
    if (!
is_admin()) {
        
wp_deregister_script('wp-embed');
        
wp_deregister_script('jquery');  // Bonus: remove jquery too if it's not required
    
}
}
add_action('init''crunchify_stop_loading_wp_embed_and_jquery');


AndreasB 22.03.2018 12:01

@protonenbeschleuniger

Echt nett von Dir :)

Das Erstellen des Themes und Aktivieren hat auf Anhieb geklappt. Cool!

Wirklich schön minimalistisch!

Danke! Wenn Du mal in Berlin sein solltest, lade ich Dich gerne auf ein Bier ein :)

Der letzte Teil des von Dir geposteten PHP-Codes zum Entfernen einiger Funktionen: welcher Dateiname muss dafür bitte vergeben werden?


Dann kann es jetzt also losgehen mit kleinen Aufgaben, die ich mir selber stelle.

Vor allem muss ich mir ein gutes PHP-Tutorial/Buch suchen.

protonenbeschleuniger 22.03.2018 13:26

Oh, vergessen: functions.php

Die ist aber nicht notwendig. Du müsstest aber sehen, dass etwas Javascript Code im HTML erscheint der nicht aus dem Template kommt. Was nicht schlimm wäre, wenn du z.b. sowieso vor hast mit jQuery zu arbeiten.

AndreasB 22.03.2018 14:25

Danke. functions.php ist jetzt auch drin.

Mal sehen, ob mir der Feinschliff hin zu
https://borumat.de/-/ge/minimal
gelingen wird.

* Entfernen des gesamten Codes zwischen <!-- (footer.php) --> und </body>

* Erzeugen eines Menüs mit <nav><a></a></nav> (McMurphy hatte kürzlich erwähnt, dass man ja die ul weglassen kann, schöne Idee.)

* relative Links zur Basis statt absolute

* ...


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:23 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2019, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2019