Einträge in Kategorieansicht kürzen

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
u1amo01
Regular
Posts: 273
Joined: Fri Sep 28, 2007 3:55 pm
Location: Kurpfalz, Germany
Contact:

Einträge in Kategorieansicht kürzen

Post by u1amo01 »

Moin moin.

Wenn in meinem Blog eine Kategorie aufgerufen wird, sollen nur Titel und der Anfang der Artikel gezeigt werden.

Das müsste irgendwie [TM] mit {... |@truncate:200:'...'} gehen in einer entsprechenden tpl-Datei. Wie müsste die heißen? Ich glaube auch, das schonmal gesehen zu haben, aber in welchem Template? (Dann könnte ich mir das dort ansehen)

Vielen Dank.
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Einträge in Kategorieansicht kürzen

Post by yellowled »

u1amo01 wrote:Wenn in meinem Blog eine Kategorie aufgerufen wird, sollen nur Titel und der Anfang der Artikel gezeigt werden.

Das müsste irgendwie [TM] mit {... |@truncate:200:'...'} gehen in einer entsprechenden tpl-Datei. Wie müsste die heißen? Ich glaube auch, das schonmal gesehen zu haben, aber in welchem Template? (Dann könnte ich mir das dort ansehen)
Wie in der meisten Fällen: Mimbo. :mrgreen: (Nehme ich an. Unter anderem.)

Allerdings wird es dort nicht in Kategorien-Ansicht, sondern für die Teaser auf der Startseite verwendet. Die Kürzung des Eintragstextes sieht so aus:

Code: Select all

{$entry.body|strip_tags|truncate:400:" ..."}
strip_tags ist wichtig, weil Du Dir ansonsten evtl. invaliden Code einfängst. $entry.body enthält nicht nur den reinen Eintragstext, sondern ggf. auch HTML-Elemente zur Auszeichnung, etwa <p></p>. Wird $entry.body nun etwa bei 400 Zeichen (wie im obigen Code-Beispiel) abgeschnitten, kann es sein, dass das schließende </p>-Element die Zeichen 401-403 wären, somit hättest Du einen nicht geschlossenen Absatz und damit Ärger mit dem Validator. Das abschließende " ..." wird an den gekürzten & gestrippten $entry.body angehängt, um die Kürzung zu signalisieren. (Kann geändert werden, aber die "" müssen sein.)

Damit das nur in Kategorienansicht geschieht, baust Du am besten in die entries.tpl eine Abfrage ein:

Code: Select all

{if $view == 'categories'}
    [gekürzter $entry.body]
{else}
    [voller $entry.body]
{/if}
Bei Fragen fragen.

YL
u1amo01
Regular
Posts: 273
Joined: Fri Sep 28, 2007 3:55 pm
Location: Kurpfalz, Germany
Contact:

Re: Einträge in Kategorieansicht kürzen

Post by u1amo01 »

Danke für die ausführliche Erläuterung :-)

Funktioniert wunderbar.

Jetzt muss ich das nur noch ein bischen aufhübschen, weil ich natürlich die Metadaten in der Kategorieansiche weghaben will. Und einen zusätzlichen Link nach dem " ..." zur Artikelansicht haben möchte. Ich denke das kriege ich hin, mal sehen.

Danke!
u1amo01
Regular
Posts: 273
Joined: Fri Sep 28, 2007 3:55 pm
Location: Kurpfalz, Germany
Contact:

Re: Einträge in Kategorieansicht kürzen

Post by u1amo01 »

Dideldum, dideldei ... macht immer wieder Spaß, Serendipity :-)

To whom it may concern
meine Komplettlösung:

Ergänzung in entries.tpl

Code: Select all

{if $view == 'categories'}
      {$entry.body|strip_tags|truncate:200:" ..."}
      <p class="floatr"><a href="{$entry.link}" title="{$entry.title}">{$CONST.BASE_READON}</a></p>
  {else}
     {$entry.body}
{/if}
Eintrag in lang_de.inc.php

Code: Select all

@define('BASE_READON', 'weiterlesen &#187;');
Eintrag in lang_en.inc.php

Code: Select all

@define('BASE_READON', 'continue &#187;');
Die Dateien in /UTF-8 ebenfalls entsprechend ergänzen.

Voilà. :-)

Danke!
Frankenstein
Regular
Posts: 6
Joined: Sun Feb 20, 2011 12:32 pm
Location: Son Servera, Spanien

Re: Einträge in Kategorieansicht kürzen

Post by Frankenstein »

Hallo Ihr Spezialisten,

ich habe das Problem, daß wenn ich den Code wie angegeben einbaue, der erste Teil wie gewünscht abgeschnitten wird, dann aber der komplette Text noch einmal hintenangestellt wird.
Dieses ist aber nur die halbe Wahrheit - auf der Startseite wird der komplette Text einfach zwei Mal hintereinander ausgegeben.
Was habe ich falsch gemacht? Weiterhin würde mich interessieren, ob es eine Möglichkeit gibt, diese Funktion lediglich auf die Startseite zu beschränken.

Das Problem ist hier zu besichtigen http://tiny.cc/8nc1y

Vielen Dank für Eure Hilfe.


Frank
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Einträge in Kategorieansicht kürzen

Post by yellowled »

Frankenstein wrote:ich habe das Problem, daß wenn ich den Code wie angegeben einbaue, der erste Teil wie gewünscht abgeschnitten wird, dann aber der komplette Text noch einmal hintenangestellt wird.
Zeig mal bitte den Anfang Deiner entries.tpl, also den Teil vor „<rdf:RDF“.

YL
Frankenstein
Regular
Posts: 6
Joined: Sun Feb 20, 2011 12:32 pm
Location: Son Servera, Spanien

Re: Einträge in Kategorieansicht kürzen

Post by Frankenstein »

yellowled wrote:
Frankenstein wrote:ich habe das Problem, daß wenn ich den Code wie angegeben einbaue, der erste Teil wie gewünscht abgeschnitten wird, dann aber der komplette Text noch einmal hintenangestellt wird.
Zeig mal bitte den Anfang Deiner entries.tpl, also den Teil vor „<rdf:RDF“.

YL

OK, das ist alles was davor steht

Code: Select all

<!-- ENTRIES START -->
    {serendipity_hookPlugin hook="entries_header" addData="$entry_id"}

    {foreach from=$entries item="dategroup"}
    <div class="serendipity_Entry_Date">


        {foreach from=$dategroup.entries item="entry"}
        <h4 class="serendipity_title"><a href="{$entry.link}">{$entry.title}</a></h4>
                {if $dategroup.is_sticky}
        <h3 class="serendipity_date">{$CONST.STICKY_POSTINGS}</h3>
        {else}
        <h3 class="serendipity_date">{$dategroup.date|@formatTime:DATE_FORMAT_ENTRY}</h3>
        {/if}

        <div class="serendipity_entry serendipity_entry_author_{$entry.author|@makeFilename} {if $entry.is_entry_owner}serendipity_entry_author_self{/if}">
            {if $entry.categories}
<!--
            <span class="serendipity_entryIcon">
            {foreach from=$entry.categories item="entry_category"}
                {if $entry_category.category_icon}
                    <a href="{$entry_category.category_link}"><img class="serendipity_entryIcon" title="{$entry_category.category_name|@escape}{$entry_category.category_description|@emptyPrefix}" alt="{$entry_category.category_name|@escape}" src="{$entry_category.category_icon}" /></a>
                {/if}
            {/foreach}
            </span>
-->
            
    {if $view == 'categories'}
          {$entry.body|strip_tags|truncate:200:" ..."}
          <p class="floatr"><a href="{$entry.link}" title="{$entry.title}">{$CONST.BASE_READON}
</a></p>
      {else}
         {$entry.body}
    {/if}

            {/if}

            <div class="serendipity_entry_body">
                {$entry.body}
            </div>

            {if $entry.is_extended}
            <div class="serendipity_entry_extended"><a id="extended"></a>{$entry.extended}</div>
            {/if}

            {if $entry.has_extended and not $is_single_entry and not $entry.is_extended}
            <br /><a href="{$entry.link}#extended">{$CONST.VIEW_EXTENDED_ENTRY|@sprintf:$entry.title}</a><br /><br />
            {/if}

            <div class='serendipity_entryFooter'>
                {$CONST.POSTED_BY} <a href="{$entry.link_author}">{$entry.author}</a>
                {if $entry.categories}
                   {$CONST.IN} {foreach from=$entry.categories item="entry_category" name="categories"}<a href="{$entry_category.category_link}">{$entry_category.category_name|@escape}</a>{if not $smarty.foreach.categories.last}, {/if}{/foreach}
                {/if}

                {if $dategroup.is_sticky}
                    {$CONST.ON}
                {else}
                    {$CONST.AT}
                {/if} <a href="{$entry.link}">{if $dategroup.is_sticky}{$entry.timestamp|@formatTime:DATE_FORMAT_ENTRY} {/if}{$entry.timestamp|@formatTime:'%H:%M'}</a>

                {if $entry.has_comments}
                    {if $use_popups}
                        | <a href="{$entry.link_popup_comments}" onclick="window.open(this.href, 'comments', 'width=480,height=480,scrollbars=yes'); return false;">{$entry.label_comments} ({$entry.comments})</a>
                    {else}
                        | <a href="{$entry.link}#comments">{$entry.label_comments} ({$entry.comments})</a>
                    {/if}
                {/if}

                {if $entry.has_trackbacks}
                    {if $use_popups}
                        | <a href="{$entry.link_popup_trackbacks}" onclick="window.open(this.href, 'comments', 'width=480,height=480,scrollbars=yes'); return false;">{$entry.label_trackbacks} ({$entry.trackbacks})</a>
                    {else}
                        | <a href="{$entry.link}#trackbacks">{$entry.label_trackbacks} ({$entry.trackbacks})</a>
                    {/if}
                {/if}

                {if $entry.is_entry_owner and not $is_preview}
                        | <a href="{$entry.link_edit}">{$CONST.EDIT_ENTRY}</a>
                {/if}

                {$entry.add_footer}
            </div>
        </div>
Frank
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Einträge in Kategorieansicht kürzen

Post by yellowled »

Frankenstein wrote:

Code: Select all

{if $view == 'categories'}
    {$entry.body|strip_tags|truncate:200:" ..."}
    <p class="floatr"><a href="{$entry.link}" title="{$entry.title}">{$CONST.BASE_READON}
</a></p>
{else}
    {$entry.body}
{/if}

{/if}

<div class="serendipity_entry_body">
{$entry.body}
</div>
Abgesehen davon, dass das 2. {/if} (zusammen mit dem {if $entry.categories} vor dem auskommentierten Teil) überflüssig ist, macht das Template genau, was Du anweist: „falls Kategorienansicht, gib den gekürzten Eintrag und den Weiterlesen-Link aus, falls nicht, den Eintragskörper; gib danach nochmals den Eintragskörper in einem Container aus“.

Code: Select all

<div class="serendipity_entry_body">
{if $view == 'categories'}
    {$entry.body|strip_tags|truncate:200:" ..."}
    <p class="floatr"><a href="{$entry.link}" title="{$entry.title}">{$CONST.BASE_READON}
</a></p>
{else}
    {$entry.body}
{/if}
</div>
gibt das aus, was Du möchtest (wenn ich Dich richtig verstehe). Die Zeilen 17 bis 40 Deines Codes sind dann überflüssig.

YL
Frankenstein
Regular
Posts: 6
Joined: Sun Feb 20, 2011 12:32 pm
Location: Son Servera, Spanien

Re: Einträge in Kategorieansicht kürzen

Post by Frankenstein »

Super, das genau war der Groschen der mir an der Mark fehlte :D - jetzt funktioniert alles prima.

Vielen Dank.

Eine Frage hätte ich da noch, gibt es eine Möglichkeit diese Funktion lediglich auf die Startseite zu beschränken und in der Kategorieansicht die "normale Ansicht" zu haben?

Frank
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Einträge in Kategorieansicht kürzen

Post by yellowled »

Frankenstein wrote:Eine Frage hätte ich da noch, gibt es eine Möglichkeit diese Funktion lediglich auf die Startseite zu beschränken und in der Kategorieansicht die "normale Ansicht" zu haben?
Natürlich. Ersetze {if $view == 'categories'} durch {if $view == 'start'}.

(Dir ist schon bewusst, dass Du diese Funktionalität auch hinbekommen hättest, ohne im Template rumzuklöppeln, indem Du einfach erweiterte Einträge benutzt?)

YL
Frankenstein
Regular
Posts: 6
Joined: Sun Feb 20, 2011 12:32 pm
Location: Son Servera, Spanien

Re: Einträge in Kategorieansicht kürzen

Post by Frankenstein »

yellowled wrote:
Frankenstein wrote:Eine Frage hätte ich da noch, gibt es eine Möglichkeit diese Funktion lediglich auf die Startseite zu beschränken und in der Kategorieansicht die "normale Ansicht" zu haben?
Natürlich. Ersetze {if $view == 'categories'} durch {if $view == 'start'}.

(Dir ist schon bewusst, dass Du diese Funktionalität auch hinbekommen hättest, ohne im Template rumzuklöppeln, indem Du einfach erweiterte Einträge benutzt?)

YL

Danke für die Info und "nein" das war mir nicht bewusst, das es auch anders geht. Wenn es so gewesen wäre, hätte ich mir dieses hier ja sparen können (außerdem klöppel ich doch so gerne :) )

Danke für deine Hilfe.


Frank
Frankenstein
Regular
Posts: 6
Joined: Sun Feb 20, 2011 12:32 pm
Location: Son Servera, Spanien

Re: Einträge in Kategorieansicht kürzen

Post by Frankenstein »

Ich hätte da noch einmal eine Frage bezüglich der verkürzten Kategorieansicht, bevor ich evtl. wieder alles etwas zu kompliziert mache.

Gibt es eine Möglichkeit in der verkürzten Ansicht ein Bild anzuzeigen und bei Aufruf des gesamten Artikel ein anderes Bild? Momentan ist es ja so, daß die eingefügten Bilder lediglich bei Ansicht des gesamten Artikels angezeigt werden, aber im verkürzten Teil dann garnichts erscheint.

Vielen Dank für Eure Hilfe.

Frank
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Einträge in Kategorieansicht kürzen

Post by yellowled »

Frankenstein wrote:Gibt es eine Möglichkeit in der verkürzten Ansicht ein Bild anzuzeigen und bei Aufruf des gesamten Artikel ein anderes Bild?
Grundsätzlich: Ja.

Simpel und einfach: Nein. (Disclaimer: Mir fällt keine simple und einfache Lösung ein. Freiwillige vor.)

Kompliziert: Anpassung des Templates analog zum Mimbo-Template, einbinden von Schmuckbildern für Artikel über das Plugin „Erweiterte Eigenschaften von Einträgen“ -- dort eines für die Kurzansicht, eines für die Artikelansicht einbauen, wie es in Mimbo gemacht wird. Alternative funktioniert es evtl. auch, nur eines für die Kurzansicht zu definieren, in der Kurzansicht in den Artikel eingebundene Bilder zu unterbinden und das Bild für die Artikelansicht klassisch in den Artikel einzubinden.

Detailliert: Habe ich zumindest aktuell keine Zeit dazu, müsste man auch definitiv mehr über Dein Template wissen bzw. erfragen.

YL
Frankenstein
Regular
Posts: 6
Joined: Sun Feb 20, 2011 12:32 pm
Location: Son Servera, Spanien

Re: Einträge in Kategorieansicht kürzen

Post by Frankenstein »

yellowled wrote:
Frankenstein wrote:Gibt es eine Möglichkeit in der verkürzten Ansicht ein Bild anzuzeigen und bei Aufruf des gesamten Artikel ein anderes Bild?
Grundsätzlich: Ja.

Simpel und einfach: Nein. (Disclaimer: Mir fällt keine simple und einfache Lösung ein. Freiwillige vor.)

Kompliziert: Anpassung des Templates analog zum Mimbo-Template, einbinden von Schmuckbildern für Artikel über das Plugin „Erweiterte Eigenschaften von Einträgen“ -- dort eines für die Kurzansicht, eines für die Artikelansicht einbauen, wie es in Mimbo gemacht wird. Alternative funktioniert es evtl. auch, nur eines für die Kurzansicht zu definieren, in der Kurzansicht in den Artikel eingebundene Bilder zu unterbinden und das Bild für die Artikelansicht klassisch in den Artikel einzubinden.

Detailliert: Habe ich zumindest aktuell keine Zeit dazu, müsste man auch definitiv mehr über Dein Template wissen bzw. erfragen.

YL

OK, vielen Dank für die Antwort. Wenn Du Lust und vor allem mehr Zeit hast, kannst Du ja Bescheid sagen, dann können wir uns im Detail noch einmal darüber unterhalten. Wer weiß, vielleicht fällt Dir ja noch eine einfachere Lösung dazu ein.

Frank
montebianco
Regular
Posts: 42
Joined: Tue Feb 28, 2012 9:13 am

Re: Einträge in Kategorieansicht kürzen

Post by montebianco »

yellowled wrote:
Frankenstein wrote:

Code: Select all

{if $view == 'categories'}
    {$entry.body|strip_tags|truncate:200:" ..."}
    <p class="floatr"><a href="{$entry.link}" title="{$entry.title}">{$CONST.BASE_READON}
</a></p>
{else}
    {$entry.body}
{/if}

{/if}

<div class="serendipity_entry_body">
{$entry.body}
</div>
Abgesehen davon, dass das 2. {/if} (zusammen mit dem {if $entry.categories} vor dem auskommentierten Teil) überflüssig ist, macht das Template genau, was Du anweist: „falls Kategorienansicht, gib den gekürzten Eintrag und den Weiterlesen-Link aus, falls nicht, den Eintragskörper; gib danach nochmals den Eintragskörper in einem Container aus“.

Code: Select all

<div class="serendipity_entry_body">
{if $view == 'categories'}
    {$entry.body|strip_tags|truncate:200:" ..."}
    <p class="floatr"><a href="{$entry.link}" title="{$entry.title}">{$CONST.BASE_READON}
</a></p>
{else}
    {$entry.body}
{/if}
</div>
gibt das aus, was Du möchtest (wenn ich Dich richtig verstehe). Die Zeilen 17 bis 40 Deines Codes sind dann überflüssig.

YL
Wenn ich das richtig verstehe, gibt diese Anweisung in JEDEM Fall einen "weiterlesen"-Link aus... Wie muss ich den Teil da oben verändern, dass s9y das NUR bei Artikeln macht, die auch tatsächlich abgeschnitten wurden (d.h. länger als die - in diesem Fall - 200 Zeichen sind)??
Macht ja keinen Sinn, unter Einträgen, die nur aus einem Satz bestehen, noch einen "Weiterlesen"-Link stehen zu haben....

lg, montebianco
Post Reply