Beiträge von Karbrüggen

    Ich würde mir eine Funktion schreiben (sei es nun als Plugin oder direkt im Theme), welches ein benutzerdefiniertes Feld ausliest und entsprechend [FONT=Courier New]unregister_sidebar_widget()[/FONT] aufruft.

    Da ich persönlich aber keine Widgets einsetze wüsste ich jetzt nicht auf Anhieb, mit welchem Namen das "Text"-Widget vorher mal registriert wurde...

    LG
    Dominik

    Hier kommt der Fehler her:

    Code
    <!--<p><small><strong>Code-Beispiele:</strong> Damit die Code-Beispiele richtig angezeigt werden, [COLOR=Red]m�ssen[/COLOR] die Sonderzeichen maskiert werden (z. B. <code><</code> zu <code>&lt;</code>).</small>--></p>

    Da ist die Template-Datei (comments.php) wohl nicht UTF-8-codiert abgespeichert.

    Nee, daran allein liegs nicht. ;-) Wenn ich mir die Struktur ansehe gibts noch einen Syntaxfehler...

    Der Teil in grün ist wohl eher irrelevant, weil er im Kommentar steht. Aber die schließenden Kommantar- und Paragraph-Tags kommen in der falschen Reihenfolge... ;-)

    LG
    Dominik

    Klar helfe ich. Gib mir ne ~Stunde Zeit, dann geb ich dir ne kleine Ausarbeitung...

    --- eine Stunde später: ---

    (Anm.: "mit " und "ohne" Javascript bedeutet im Folgenden "aktiviertes" bzw. "deaktiviertes" Javascript, dto. für CSS)

    Die Idee, die ich verfolgen würde sähe so aus:

    • Besucher ohne Javascript sollen von vornherein den vollen Kommentar lesen können.
    • Besucher mit Javascript bekommen zunächst einen Teaser.

    Praktische Realisierungen wären entweder

    • sowohl den Teaser als auch den Kommentar auszuliefern (also praktisch doppelt)
      • der Teaser wird zunächst versteckt und der volle Kommentar angezeigt; wenn Javascript aktiv ist, wird die Sichtbarkeit vertauscht und erst ein Klick auf "mehr" gibt wieder den vollen Kommentar preis
        • Vorteil: relativ wenig JS-Code
        • Nachteil: Besucher ohne CSS bekommen zweimal den selben Text angezeigt (KO-Kriterium)
    • oder aber nur den vollen Kommentar auszugeben und diesen per Javascript nach dem Laden zu "verstümmeln".
      • Vorteil: kein doppelter Kommentar
      • Nachteil: relativ aufwändiger JS-Code, u.U. lange Bearbeitung auf langsameren Rechnern
    • oder aber es wird nur der Teaser ausgeliefert, und der Kommentar wird dynamisch nachgeladen
      • Vorteil: relativ einfacher JS-Code
      • Nachteil: schwierige Realisierung des PHP-Codes, insbesondere für Besucher ohne Javascript, da der Kommatar (alleinstehend, denn der Klick auf "mehr" führt ja zu einer eigenen Seite) u.U. aus dem Zusammenhang fällt...

    Zwischenfazit: Punkt 1 entfällt wegen dem KO-Kriterium und bei Punkt drei scheue ich mich vor der Arbeit (Was nicht heißen soll, dass es unmöglich ist. Aber in den Innereien des WP-kerns nach der an der benötigten Stelle nicht dokumentierten API zu fahnden ist WIRKLICH mühselig...!).

    Bleibt also noch Punkt 2. Zu dessen Umsetzung sind folgende Vorraussetzung notwendig:

    1. Um den JS-Code so einfach und funktional wie möglich zu halten sollten entsprechende Bibliotheken eingebunden werden. Hier bietet sich jQuery an, da es bereits in WP integriert ist.
    2. Die einzelnen Kommentare müssen Identifizierbar sein, also über eine eigene ID vefügen (was eigentlich der Fall sein sollte, es sei denn der Theme-Designer war sich dieser Funtionalität nicht bewusst...)
    3. Es muss eine JS-Funktion geschrieben werden, die überlange Kommentare verkürzt, aber das Original zur Rekonstruktion speichert und einen "Link" zur Funktion setzt, die
    4. den ursprünglichen Kommentar wiederherstellt.

    Erläuterungen:

    1. Wenn du noch kein Plugin oder Widget nutzt, dass eigenständig jQuery einbindet kannst du dies selbst in der [FONT=Courier New]header.php[/FONT] vornehmen, am besten direkt vor dem Aufruf von [FONT=Courier New]wp_head()[/FONT]:

      PHP
      ...
      <script type="text/javascript" src="<?php bloginfo('url'); ?>/wp-includes/js/jquery/jquery.js"></script>
      <?php wp_head(); ?>
      ...
    2. Hier bietet sich an die automatisch vergebene (naja, falls der Theme-Autor daran gedacht hat) Kommentar-ID zu benutzen ([FONT=Courier New]comments.php[/FONT]): Irgendwo taucht (meist bei Listen-Elementen) die Passage "[FONT=Courier New]id="comment-<?php comment_ID() ?>"[/FONT]" auf. Wenn ja, dann ist alles in Ordnung. Was jetzt noch interessiert ist die nachfolgende Struktur des Kommentares, um mit jQuery daranzukommen. Im Fall des Default-Themes sähe der Aufruf für Kommentar Nr. 4711 so aus:
      Code
      $(document).ready(function(){
        $('#comment-4711 p'); // wichtige Stelle!
      });

      Das Objekt in der markierten Zeile hält nun alle Absätze, die der Kommentator abgesendet hat. Hieraus ergibt sich aber nun ein Problem, das eher zum nächsten Punkt gehört...

    3. Wie stelle ich fest, dass ein Kommentar zu lang ist?
      Am Einfachsten ist es, dass ich schon per PHP die Länge des Kommentares auswerte und dem ensprechenden Element meinetwegen die (bisher unbenutzte) Klasse [FONT=Courier New]longcomment[/FONT] verpasse, also etwa so:

      PHP
      $longcomment = count(get_comment_text()) > 140
        ? ' class="longcomment"'
        : '';
      <li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>"<?php echo $longcomment ?>>

      Das Vereinfacht denke ich die Arbeit mit jQuery nochmal, da ich jetzt mit...

      Code
      $(document).ready(function(){
        $('.longcomment').each(function(){
          //... jedem Kommentar...
        }
      });

      ... etwas machen kann, ihn z.B. kürzen.

    4. Diesre Punkt braucht kaum Erläuterung; das Original wird in einer Variable gespeichert und bei Bedarf wieder ausgelesen...

    Ich hoffe das ist fürs Erste Anregung genug. Diese Links würde ich dir noch ans Herz legen:

    LG
    Dominik

    Anmerkung: Ich habe eben noch im Codex das hier gefunden. Falls du darauf ausch gestoßen sein solltest: Lies nochmal den ersten praktischen Ansatz... ;-)

    Willst du die Daten manuell eingeben oder nutzt du vielleicht ein "Geo-sync-person-to-position-web-service" (gibts sowas)?

    Wenn ersteres zutrifft: Warum nicht direkt das Template bearbeiten, wenn du eh was eingeben musst?
    Wenn letzteres zutriftt: Welchen Dienst nutzt du?

    LG
    Dominik

    Also ich lese im Codex (Template Tags/the content « WordPress Codex), direkt als Notiz unter der Beschreibung:

    Zitat

    The <!--more--> quicktag will not operate and is ignored if there is only one post being displayed.

    Das verrät doch schonmal was...

    Im Übrigen gibt es für PHP-Code auch einen Button, bzw. BBCode, um den ansprechend darzustellen, das hilf enorm den Überblick zu behalten.

    PHP
    <?php
      die('Long live PHP!');
    ?>

    (Quellcode mit Klick auf "Zitieren" sichtbar ;-))

    LG
    Dominik

    Kann die Sidebar nach unten verschoben werden?

    Wenn ja, wie? (also dass sie quasi im Fussbereich des Blogs ist)

    Na klar, per CSS und eventuell ein paar Feinjustierungen in der Template-Struktur deines Themes.

    Zitat

    und kann die Sidebar auch überblendend dargestellt werden, und zwar OHNE Java?

    Wenn ja, wie?

    (überblendend = NICHT Inhaltverschiebend)

    Das geklammerte Verstehe ich nicht. Aber mit Sicherheit kann ich dich beruhigen: heutzutage benutzt niemand mehr Java im Webdesign... Da hat Flash eindeutig die Nase vorn ;-)

    LG
    Dominik

    Ui, damit würdest du aber den Kommentarfluss deiner zwei, drei sehr redefreudigen Schreiberlingen massivst einschränken, ja, ich würde sogar fast soweit gehen und sagen, du würdest sie zensieren (was mir aber die Definition von Zensur ein wenig zunichte macht ;-))

    Wenn es aber nur dein Ziel ist, die Kommatarfelder auf eine maximale Größe festzulegen, empfiehlt sich folgender Ansatz vielleicht:

    • definere die CSS-Eigenschaft [FONT=Courier New]max-height[/FONT] des Kommentarbereiches auf die gewünschte maximale Höhe, und
    • verpasse dem Kommentarfeldbereich ein passendes [FONT=Courier New]overflow[/FONT]-Verhalten (auch CSS)

    Die andere Möglichkeit wäre nur die ersten [FONT=Times New Roman]x[/FONT] Zeichen anzeigen zu lassen, dahinter und dahinter ein "mehr..."-Link zu setzen, dessen Klick darauf den vollen Kommentartext erscheinen lässt. Idealerweise geschieht dies unaufdringlich durch Javascript, und alle sind zufrieden ;-)

    Das soweit als Ansätze, bei den beiden Vorschlägen würde wir (ich nehme mir mal raus für alle hier sprechen zu dürfen) dir sicher gerne weiterhelfen. Bei meiner Interpretation deines Vorschlags werde ich mich aber vornehm zurückhalten ;-)

    LG
    Dominik

    [FONT=Courier New]...post.php...[/FONT]

    Das scheint es zu sein (!). Wenn ich die Zeile entferne, dann ist der Fehler weg, aber es kommen eben auch keine Beiträge mehr.

    Ist ja auch logisch weil du dann eine leere Schleife hast ;-)

    Wenn dein Archiv in dem Layout der Startseite erscheinen soll, kannst du den Inhalt der Schleife der [FONT=Courier New]index.php[/FONT] bzw. [FONT=Courier New]home.php[/FONT] hierein kopieren, dann sollte es laufen.

    Interessant wäre aber auch zu wissen, wodurch denn der Fehler genau entstanden ist, zumindest mich würde die [FONT=Courier New]post.php[/FONT] brennend interessieren...

    LG
    Dominik

    Kurz zum Verständnis:

    Wenn die Fehlermeldung lautet "...headers already sent..." bedeutet dies nicht - wie hier angenommen -, dass etwas mit der [FONT=Courier New]header.php[/FONT] nicht stimmt. Um das zu verstehen muss man den Aufbau einer HTTP-Anfrage verstehen, vereinfacht ausgedrückt: Wenn dein Browser eine Seite anfordert und eine Antwort vom Server erwartet, schickt dieser vor der eigentlichen Seite (das, was du als Quellcode betrachten kannst) noch zusätzliche Informationen (z.B. Datum, Zeichensatz, Länge des folgenden Content-Bereiches, etc.) - den HTTP-Header.

    Gemäß RFC muss (!) der Header (genauer: die Header (-Informationen)) vor dem Content (der Seite) übertragen werden, alles andere erzeugt Fehler.

    Bei PHP ist es nun möglich eigene Header-Informationen zu senden, dazu gibts den Befehl [FONT=Courier New]header()[/FONT] (siehe PHP: header - Manual). Um diesen nutzen zu können, darf vor dem Aufruf dieses befehls noch nichts vom Content gesendet worden sein, auch keine Leerzeile oder Leerzeichen. Beispiel:

    PHP
    <?php
    /*
      Dies erzeugt einen serverseitigen Fehler: zuerst wird Inhalt ausgeliefert,
      danach kommen aber noch Header-Informationen.
    */
    echo ' ';
    header('Content-type: image/png');
    ?>
    PHP
    <?php
    /*
      Dies erzeugt einen Fehler auf Browserseite: Zwar wird zuerst der Header
      ausgeliefert, aber der Inhalt passt nicht zur Information (ein PNG-Bild
      beginnt nicht mit einem Leerzeichen ;-))
    */
    header('Content-type: image/png');
    echo ' ';
    ?>

    Dein problem liegt also jetzt darin, dass irgendwo etwas ausgegeben wird, was dort nicht ausgegeben werden darf. Die Fehlerquelle ([FONT=Courier New]/wp-includes/pluggable.php:771[/FONT]) zeigt mir, dass von irgendwo [FONT=Courier New]wp_redirect()[/FONT] aufgerufen wird.

    Nutzt dein Theme eine [FONT=Courier New]functions.php[/FONT]? Wenn ja, poste die mal hier.

    LG
    Dominik

    //Edit:
    Was ist mit

    PHP
    <?php require('post.php'); ?>


    in der [FONT=Courier New]archive.php[/FONT]? Das scheint mir sehr merkwürdig...

    Du kannst im Artikel den More-Tag setzen:

    Code
    Artikel-Blindtext, langweilig. Kommt aber in den Feed.
    <!--more-->
    Artikel-Blindtext, auch langweilig. Wird aber nicht mehr in den Feed gepackt.

    Das hat dann aber auch Auswirkungen auf deine Startseite, je nach verwendetem Theme. Dort wird nämlich anstelle des More-Tags ein Link "Weiterlesen..." o.ä. eingesetzt.

    LG
    Dominik

    Hi,

    die kannst du (speziell nur für das große Texteingabefeld) in der [FONT=Courier New]/wp-admin/css/wp-admin.css[/FONT] in Zeile ~300 festlegen:

    Code
    #editorcontainer #content {
        padding: 0;
        line-height: 150%;
        border: 0 none;
        outline: none;
        /* das einfügen: */
        [COLOR=Red]font: 20pt Georgia;[/COLOR]
    }

    Wenn du alle Eingabefelder neu formatieren möchtest, geht das einfacher über die [FONT=Courier New]/wp-admin/css/global.css[/FONT], Z. ~23:

    Code
    textarea, input, select {
        /* das ändern: */
        [COLOR=Red]font: 13px Verdana, Arial, Helvetica, sans-serif;[/COLOR]
        margin: 1px;
        padding: 3px;
    }

    (Die Zeilenangaben beziehen sich auf Version 2.6, dürften sich aber nicht geändert haben...)

    LG
    Dominik