Typoscript Image Page Menu (colPos, subpages, Leveluid -2 Sitemap)

Hallo zusammen, hier mal wieder ein spannendes Typoscript für jeden der es gebrauchen kann. Ich rendere alle Seiten (z.B. von meiner Seite -> Elternseiten dessen Seiten) (siehe Bild unter [143] marctest) und gebe dazu noch das Bild aus einer bestimmten Spalte aus. Dies soll dynmaisch auf allen Seiten passieren und dazu noch ohne ein Plugin extra dafür zu schreiben.

Umsetzung
TYPO3 6.2.x & Gridelements

Ausgangslage
typo3_seitenbaum

Ziel
1) Alle Seiten zu bekommen.
Aber nicht von der aktuellen Seite sondern von der Elternseite also leveluid : -2. Dazu soll immer die aktuelle Seite versteckt werden, damit ich mich nicht noch mal selber ausspiele.
2) Von der Seite noch aus einer anderen Spalte das Bild, damit der Kunde nicht immer alles doppelt pflegen muss.
3) Der Titel der aktuellen Seite (Standard im TMenu)

Das Ergebnis
Mit dem Typoscript kann man wunderbar von aktuellen Seite dessen Übergeordneten Subpages auslesen und die aktuelle Seite entfernt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
lib.refenzpages = HMENU
lib.refenzpages {
    special = directory
    special.value.data = leveluid : -2
    excludeUidList = current
    1 = TMENU
    1 {
        wrap = <div id="referenzmenu" class="row">|</div>
        expAll = 1
        NO {
            linkWrap = <div class="col-xs-12 col-sm-6 ">|</div>
 
            stdWrap.htmlSpecialChars = 0
            stdWrap.cObject = COA
            stdWrap.cObject {
                10 = TEXT
                10.field = uid
                10.wrap = <div class="page uid"> #bitte statt uid ein | machen
 
                #images
                50 = CONTENT
                50 < styles.content.getRight
                50 {
                    select{
                        where = colPos=1
                        pidInList >
                        pidInList.data = field:uid
                    }
                    renderObj {
                        image.20.maxW = 160
                        textpic.20.maxW = 160
                    }
                }
 
                # title
                55 = TEXT
                55 {
                    field = title
                    wrap = |
                }
 
                60 = TEXT
                60 {
                    value = </div>
                }
            }
        }
    }
}
 
 
# specialmenu nach uid
lib.refenzpagesUID < lib.refenzpages
lib.refenzpagesUID {
    special.value.current = 1
    excludeUidList = current
 
    wrap = <div id="referenzmenuUID" class="row">|</div>
}

Das Gridelement

1
2
3
4
5
6
7
8
9
10
11
<div class="pagereferenz">
    <h3>{data.flexform_section_headline}</h3>
    <f:if condition="{data.flexform_section_refid}">
        <f:then>
            <f:cObject typoscriptObjectPath="lib.refenzpagesUID" data="{data.flexform_section_refid}" />
        </f:then>
        <f:else>
            <f:cObject typoscriptObjectPath="lib.refenzpages" />
        </f:else>
    </f:if>
</div>

Flexform

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3DataStructure>
    <meta type="array">
        <langdisable>1</langdisable>
    </meta>
 
    <ROOT type="array">
        <type>array</type>
        <el type="array">
            <section_headline type="array">
                <TCEforms type="array">
                    <config type="array">
                        <type>input</type>
                        <size>48</size>
                        <eval>trim</eval>
                        <default>Referenzen</default>
                    </config>
                    <label>Section Headline</label>
                </TCEforms>
            </section_headline>
            <section_refid type="array">
                <TCEforms type="array">
                    <config type="array">
                        <type>input</type>
                        <size>48</size>
                        <eval>trim</eval>
                        <default></default>
                    </config>
                    <label>ReferentID</label>
                </TCEforms>
            </section_refid>
        </el>
    </ROOT>
</T3DataStructure>

Ausgabe (nicht gestylt)
typo3_ausgabe_imagetextmenu

WordPress Content / Image Manipulation

Aller Anfang ist nicht einfach und vor allem wen man mit WordPress ein wenig ausfallende Sachen möchte. Wie zum Beispiel ein oder mehrere Bilder in einem Beitrag mit einem extra DIV wrappen und dazu noch eine MetaInformation (get_post_meta) dazu zuschreiben.

Da mich diese Aufgabe ein paar Stunden gekostet hat, hier die Lösung für alle die so was suchen.

Aufgabenbeschreibung:

  1. Wrappe ein Bild mit einem extra DIV / SPAN
  2. Packe zu dem Bild ein eigenes Copyright Meta-Tag vom „Credit-Tracker-Plugin
  3. ohne das Template zu bearbeiten

Lösung:

Die Funktion „add_filter“ in der function.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// add class to image
add_filter('the_content', 'addSpanOnImage', 12);
add_filter('get_comment_text', 'addSpanOnImage');
add_filter('post_thumbnail_html', 'addSpanOnImage', 10, 3 );
function addSpanOnImage ($content,$postID="",$imageID="") {
    global $post;
 
    $newContent = $content;
 
    $copyMeta = empty($copyMeta) ? get_post_meta( $imageID, 'credit-tracker-author', true ) : "";
    if(!empty($copyMeta)){
        $copyright      = '<span class="copyright">'.$copyMeta.'</span>';
        $pattern        = '/(<img([^>]*)>)/i';
        $replacement    = '<span class="copyrightframe">'.$copyright.'$1</span>';
        $newContent     = preg_replace( $pattern, $replacement, $newContent );
    } else {
        $args = array(
            'post_type' => 'attachment',
            'numberposts' => -1,
            'post_status' => null,
            'post_parent' => $post->ID
        );
 
        $attachments = get_posts( $args );
        foreach($attachments as $attach){
            $copyright      = '<span class="copyright">'.get_post_meta( $attach->ID, 'credit-tracker-author', true ).'</span>';
            $replacement    = '<span class="copyrightframe">'.$copyright.'$1</span>';
            $newContent     = preg_replace('/(<img.+?class="(.*)wp-image-'.$attach->ID.'(.*)".+?>)/i', $replacement, $newContent);
        }
    }
 
    return $newContent;
}
?>