Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
tx_news
#1
Hallo,
hab gerade die tx_news von Georg Ringer im Einsatz und es fuxt mich ein wenig und bitte um Eure Hilfe bzw. Rat...
Habe auf einer Seite 2x die Listenansicht eingefügt und im Templates/News/ die List.html verändert.
Die Condition für colPos 1 also die linke Spalte habe ich so eingesetzt: <f:if condition="{contentObjectData.colPos} == 1"> um eine Trennung mittels <f:else> für das normale Template.
Das funktioniert schon mal Big Grin
Ich musste für mein Vorhaben leider auch noch das Partials/List/Item.html abändern gleich in der ersten Zeile anstelle des <div class="article articletype-{newsItem.type}{f:if(condition: newsItem.istopnews, then: ' topnews')}"> musste ich ein <li class="article articletype-{newsItem.type}{f:if(condition: newsItem.istopnews, then: ' topnews')}"> nehmen und das ist das Problem bei der Ansicht colPos 0 weil hier brauche ich das li nicht sondern das div und ich weis nicht wie ich das regeln kann.
Kann mir jemand helfen?
Zitieren
#2
Wenn du meinst, du musstest für die colPos = 1 ein <li>-Element in der Auflistung verwenden, dann kann dein HTML ja schon nicht valide sein, denn in Private/Templates/News/List.html ist kein umschließendes <ul>-Element. Oder hab ich was verpasst?
Zitieren
#3
Doch das passt schon es gibt auch ein ul Cool
Zitieren
#4
Mal eine Theorie (wie genau TYPO3 CMS das nun rendert weiss ich nicht):

Zwei Seiten mit angepassten Konstanten Werten für die Partial-Verzeichnisse. Hier liegt dir frei, wie du die Partials weiter aufteilst und strukturierst.

fileadmin/tx_news/PartialsLi/...
fileadmin/tx_news/PartialsDiv/...

Auf den Seiten jeweils das List Plugin einfügen. Diese Datensätze in die jeweiligen Spalten als "Datensatz einfügen"-Content Element hinterlegen.

Wie gesagt, das ist nur ne Theorie. Ich weiß nämlich nicht ob TYPO3 das TypoScript der Seite beim Rendering berücksichtigt von der es geladen werden soll oder dem TypoScript der Seite auf der es angezeigt wird.

Hier bin ich auch auf das Ergebnis gespannt, über das du mich bestimmt informierst. :-)
Zitieren
#5
Wurschtl mich gerade durch das Tutorial bis jetzt bin ich aber nicht fündig geworden Sad
Zitieren
#6
Korrigierter Eintrag:

Wo verwendest du die IF Condition? Im List Template oder?

Da kannst du doch das Partial-Rendering anpassen

Anstatt
Code:
<f:if condition="{settings.hidePagination}">
    <f:then>
        <f:for each="{news}" as="newsItem">
            <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}" />
        </f:for>
    </f:then>
    <f:else>
        <n:widget.paginate objects="{news}" as="paginatedNews" configuration="{settings.list.paginate}">
            <f:for each="{paginatedNews}" as="newsItem">
                <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}" />
            </f:for>
        </n:widget.paginate>
    </f:else>
</f:if>

das hier:

Code:
<f:if condition="{settings.hidePagination}">
    <f:then>
        <f:if condition="{contentObjectData.colPos} == 1">
            <f:then>
                <f:for each="{news}" as="newsItem">
                    <f:render partial="List/ItemLi" arguments="{newsItem: newsItem, settings:settings}" />
                </f:for>
            </f:then>
            <f:else>
                <f:for each="{news}" as="newsItem">
                    <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}" />
                </f:for>
            </f:else>
        </f:if>
    </f:then>
    <f:else>
        <f:if condition="{contentObjectData.colPos} == 1">
            <f:then>
                <n:widget.paginate objects="{news}" as="paginatedNews" configuration="{settings.list.paginate}">
                    <f:for each="{paginatedNews}" as="newsItem">
                        <f:render partial="List/ItemLi" arguments="{newsItem: newsItem, settings:settings}" />
                    </f:for>
                </n:widget.paginate>
            </f:then>
            <f:else>
                <n:widget.paginate objects="{news}" as="paginatedNews" configuration="{settings.list.paginate}">
                    <f:for each="{paginatedNews}" as="newsItem">
                        <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}" />
                    </f:for>
                </n:widget.paginate>
            </f:else>
        </f:if>
    </f:else>
</f:if>


Hier legst du im Partial/List/ Verzeichnis noch ein Template an ItemLi.html.

Dort legst du den <li>-Element Code rein und fertig ist die Sache.

Aus (eventuell relevanten) Performance Gründen setze ich das IF-Tag außerhalb der Schleife an.

Wenn man die Bedingung dann innerhalb der Schleife haben möchte kann man das auch so machen:

Code:
<f:if condition="{settings.hidePagination}">
    <f:then>
        <f:for each="{news}" as="newsItem">
            <f:if condition="{contentObjectData.colPos} == 1">
                <f:then>
                    <f:render partial="List/ItemLi" arguments="{newsItem: newsItem, settings:settings}" />
                </f:then>
                <f:else>
                    <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}" />
                </f:else>
            </f:if>
        </f:for>
    </f:then>
    <f:else>
        <n:widget.paginate objects="{news}" as="paginatedNews" configuration="{settings.list.paginate}">
            <f:for each="{paginatedNews}" as="newsItem">
                <f:if condition="{contentObjectData.colPos} == 1">
                    <f:then>
                        <f:render partial="List/ItemLi" arguments="{newsItem: newsItem, settings:settings}" />
                    </f:then>
                    <f:else>
                        <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}" />
                    </f:else>
                </f:if>
            </f:for>
        </n:widget.paginate>
    </f:else>
</f:if>
Zitieren
#7
Ich brauche die if abfrage in der Partials/List/items.htm gleich in der ersten Zeile!
Zitieren
#8
In der List.html hast du die Möglichkeit dein Objekt dem Partial per Argument zu übergeben

Code:
<f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings, contentObjectData:contentObjectData}" />
Zitieren
#9
Danke für Deine Antworten!
Du scheinst Dich wirklich damit auszukennen aber ich verstehe es leider immer noch nicht.
Hier mal mein item.html das ich in einer 2 Version für die colpos 0 brauche mit einem <div> anstelle vom <li>...
PHP-Code:
{namespace n=Tx_News_ViewHelpers}
<!--
    =====================
        
Partials/List/Item.html
-->
<
li class="article articletype-{newsItem.type}{f:if(condition: newsItem.istopnews, then: ' topnews')}">
    <
n:excludeDisplayedNews newsItem="{newsItem}" />
    <!-- 
header -->
    <!--
div class="header"-->
        <
h2>
            <
n:link newsItem="{newsItem}" settings="{settings}">
                {
newsItem.title}
            </
n:link>
        </
h2>
    <!--/
div-->

    <
f:if condition="{newsItem.media}">
        <!-- 
media preview element -->
        <
f:then>
            <!--
div class="news-img-wrap"-->
                <
n:link newsItem="{newsItem}" settings="{settings}">
                    <
f:if condition="{newsItem.mediaPreviews}">
                        <
f:then>
                            <
f:alias map="{mediaElement: newsItem.mediaPreviews.0}">
                                <
f:if condition="{mediaElement.type} == 0">
                                    <
f:image
                                        src
="uploads/tx_news/{mediaElement.image}"
                                        
title="{mediaElement.title}"
                                        
alt="{mediaElement.alt}"
                                        
maxWidth="{settings.list.media.image.maxWidth}"
                                        
maxHeight="{settings.list.media.image.maxHeight}"
                                        
/>
                                </
f:if>
                                <
f:if condition="{mediaElement.type} == 1">
                                    <
f:render partial="Detail/MediaVideo" arguments="{mediaElement: mediaElement}" />
                                </
f:if>
                                <
f:if condition="{mediaElement.type} == 2">
                                    <
f:render partial="Detail/MediaHtml" arguments="{mediaElement: mediaElement}" />
                                </
f:if>
                                <
f:if condition="{mediaElement.type} == 3">
                                    <
n:format.dam as="dam" uid="{mediaElement.uid}">
                                        <
f:image src="{dam.file_path}{dam.file_name}" title="{dam.title}" alt="{dam.alt_text}" maxWidth="{settings.detail.media.image.maxWidth}" />
                                    </
n:format.dam>
                                </
f:if>
                            </
f:alias>
                        </
f:then>
                        <
f:else>
                            <
f:if condition="{settings.displayDummyIfNoMedia}">
                            <
span class="no-media-element">
                                    <
f:image
                                        src
="typo3conf/ext/news/Resources/Public/Images/dummy-preview-image.png"
                                        
title=""
                                        
alt=""
                                        
maxWidth="{settings.list.media.image.maxWidth}"
                                        
maxHeight="{settings.list.media.image.maxHeight}"
                                        
/>
                            </
span>
                            </
f:if>
                        </
f:else>
                    </
f:if>
                </
n:link>
            <!--/
div-->
        </
f:then>
        <
f:else>
            <
f:if condition="{settings.displayDummyIfNoMedia}">
                <
f:then>
                    <!--
div class="news-img-wrap"-->
                        <
n:link newsItem="{newsItem}" settings="{settings}">
                            <
span class="no-media-element">
                                <
f:image
                                    src
="typo3conf/ext/news/Resources/Public/Images/dummy-preview-image.png"
                                    
title=""
                                    
alt=""
                                    
maxWidth="{settings.list.media.image.maxWidth}"
                                    
maxHeight="{settings.list.media.image.maxHeight}"
                                    
/>
                            </
span>
                        </
n:link>
                    <!--/
div-->
                </
f:then>
            </
f:if>
        </
f:else>
    </
f:if>

    <!-- 
teas=ser text -->
    <!--
div class="teaser-text"-->
        <
f:if condition="{newsItem.teaser}">
            <
f:then>
                <
f:format.html><f:format.crop maxCharacters="{settings.cropMaxCharacters}" respectWordBoundaries="1">{newsItem.teaser}</f:format.crop></f:format.html>
            </
f:then>
            <
f:else>
                <
f:format.html><f:format.crop maxCharacters="{settings.cropMaxCharacters}" respectWordBoundaries="1">{newsItem.bodytext}</f:format.crop></f:format.html>
            </
f:else>
        </
f:if>
            <
span class="morelink">
                <
n:link newsItem="{newsItem}" settings="{settings}">
                    
weiterlesen
                
</n:link>
            </
span>
    <!--/
div-->
</
li
Was muss ich da ändern?
Zitieren
#10
Du passt das Template Resources/Private/Templates/News/List.html an. Hier muss dein {contentObjectData} Variable an das Partial übergeben werden.

Code:
{namespace n=Tx_News_ViewHelpers}
<f:layout name="General" />
<!--
    =====================
        Templates/News/List.html
-->

<f:section name="content">
    <f:if condition="{news}">
        <f:then>
            <div class="news-list-view">
                <f:if condition="{settings.hidePagination}">
                    <f:then>
                        <f:for each="{news}" as="newsItem">
                            <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings, contentObjectData:contentObjectData}" />
                        </f:for>
                    </f:then>
                    <f:else>
                        <n:widget.paginate objects="{news}" as="paginatedNews" configuration="{settings.list.paginate}">
                            <f:for each="{paginatedNews}" as="newsItem">
                                <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings, contentObjectData:contentObjectData}" />
                            </f:for>
                        </n:widget.paginate>
                    </f:else>
                </f:if>
            </div>
        </f:then>
        <f:else>
            <div class="no-news-found">
                <f:translate key="list_nonewsfound" />
            </div>
        </f:else>
    </f:if>
</f:section>

Demnach brauchst du kein alternatives Item.html-Template sondern verwendest DAS was es bereits gibt, lediglich mit deiner Bedingung:

Code:
{namespace n=Tx_News_ViewHelpers}<!--
    =====================
        Partials/List/Item.html
-->

<f:if condition="{contentObjectData.colPos} == 1">
    <f:then>
        <li class="article articletype-{newsItem.type}{f:if(condition: newsItem.istopnews, then: ' topnews')}">
    </f:then>
    <f:else>
        <div class="article articletype-{newsItem.type}{f:if(condition: newsItem.istopnews, then: ' topnews')}">
    </f:else>
</f:if>

    <!-- ... -->
    <!-- Restlicher Inhalt -->
    <!-- ... -->

<f:if condition="{contentObjectData.colPos} == 1">
    <f:then>
        </li>
    </f:then>
    <f:else>
        </div>
    </f:else>
</f:if>
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste