Zum Inhalt springen

Kurze Frage zu Seiteninhalten..

Erstellt am 30. November 2006 · 26 Antworten · letzte Antwort am 23. September 2008 · Seite 1 von 2

Tags: Inhaltselemente, Frage

Fabian-K ·

Hi,

es wird gefordert, dass man, aehnlich wie bei tt_news, bei normalen Seiteninhalten (z.B. Text, Text m/Bild, ...) eine "Vorschau" angezeigt wird und auf einer Extraseite dann der Inhalt.

Also der Inhalt wird sogesehen gekuerzt (z.B. ein Extra-Eingabefeld fuer den Vorschautext.. Egal wie. Hauptsache es geht!!) und ein Link auf der Seite angebracht, welcher zu zu einer 'Detailansicht' leitet.

Dies muss automatisch passieren. Das ganze manuell zu machen (indem man zu jedem von Hand gekuerzten Seiteninhalt eine Seite anlegt, wo ein ausfuehrlicher Text steht, und einen Link in den 'Vorschau-Content' setzt) ist ausgeschlossen.

Also Seite A hat einen kurzen "Vorschau-Text" (so wie die short-description bei tt_news, aber anders als bei tt_news als eigenstaendigen Seiteninhalt [z.B. Text mit Bild]) und dieser bekommt automatisch einen Link ("more"-Link) zu einer Seite, auf der dann der ausfuehrliche Text zu sehen ist (long-description).

Hat dazu jemand eine Idee wie man das realisieren kann in moeglichst kurzer Zeit?
Gibt es da evtl. schon eine Extension oder sonstige Moeglichkeiten, das zu realisieren?

Hilfe!! 🙁

mfg
Fabian

just2b ·

Hallo,

ich hab sowas vor kurzem gemacht für folgende Seite: http://www.amic.at/amic/index.php?id=42
Die Inhalte kommen aus den Teamseiten mit folgendem Code in einem ext.template auf der Home-Seite.

Dann wird das ganze neu ausgegeben und der Autor noch dazugeschrieben. Das kannst du weglassen, sparst die die userfunction und 2 tabellenspalten in tt_content

Es geht sicher alles besser und schneller, aber das war ja nicht gefragt 😉

[globalVar = TSFE:id=42]


includeLibs.something = fileadmin/scripts/test.php 

page.10.subparts.TPL_CONTENT = COA
page.10.subparts.TPL_CONTENT {
30 = CONTENT
30 {
  table = tt_content
  select {
    pidInList = 46,47,48,50,58,57,59,56,55,60,61,62
    orderBy = tstamp DESC	
    where = colPos=0 and cruser_id!=1
    languageField=sys_language_uid
    max = 30
     
  }
  
  renderObj = COA_INT
  renderObj {	
    2 = TEXT
    2.field = tstamp
    2.age = min | Stunden | Tage | Jahre
    2.wrap =  <table border="1" width="100%" ><tr style="background:#d0e7f4;"><td width="120">vor:&nbsp;| </td>


    3 = TEXT
    3.field = cruser_id
    3.wrap = <td><strong>|: </strong>
   
    3.preUserFunc = user_name


    5 = TEXT
    5.field = header
    5.wrap = <strong>|</strong><br /></td></tr>
    
   
   10 = TEXT	
     10.field = bodytext
     10.crop = 350 | ... | 1
    10.wrap= <tr><td colspan="2">|<br />
    10.parseFunc < tt_content.text.20.parseFunc
    

    
    
    20 = TEXT 
    20.value = Weiter zu meiner Seite...
    20.typolink.parameter.field=pid
    20.typolink.parameter.dataWrap=|#{field:uid}
    20.wrap = |</td></tr></table>


     
  }
}
20 < styles.content.get

}
[global]

georg

Fabian-K ·

Hi.

An sich eine feine Sache, aber leider (hab vergessen es zu erwaehnen) soll der Teaser-Kram wie ein Seiteninhalt eingebunden werden koennen und das Layout soll frei waehlbar sein.
(Also z.B. Layout 1 hat Titel und Datum, Layout 2 hat Titel, Datum und Vorschautext, Layout 3 hat nur Titel und Vorschautext, ...)

Das macht das ganze recht schwierig 🙁

just2b ·

naja das ist so eine sache mit den fehlenden infos 😉

du könntest ganz einfach die verschiedenen Sitemaps überschreiben, dann kann der Editor sogar noch sagen von welchen Seiten das ganze genommen werden soll.

also ich seh bis jetzt noch kein problem 😉

georg

just2b ·

Hat mich gerade selber interssiert, deswegen eine kurze Anleitung:

TsConfig der Seite:

# neue Sitemap hinzufügen
TCEFORM.tt_content.menu_type {
addItems.8 = BlaBla
}

und dann im TS:

tt_content.menu.20.8 = COA
tt_content.menu.20.8 {

30 = CONTENT
30 {
  table = tt_content
  select {
    #pidInList = 357,361,356
    pidInList.field = pages
    orderBy = tstamp DESC	

     
  }
  
  renderObj = COA_INT
  renderObj {	
    2 = TEXT
    2.field = tstamp
    2.age = min | Stunden | Tage | Jahre
    2.wrap =  <table border="1" width="100%" ><tr style="background:#d0e7f4;"><td width="120">vor:&nbsp;| </td>


    3 = TEXT
    3.field = cruser_id
    3.wrap = <td><strong>|: </strong>
   
    #3.preUserFunc = user_name


    5 = TEXT
    5.field = header
    5.wrap = <strong>|</strong><br /></td></tr>
    
   
   10 = TEXT	
     10.field = bodytext
     10.crop = 350 | ... | 1
    10.wrap= <tr><td colspan="2">|<br />
    10.parseFunc < tt_content.text.20.parseFunc
    

    
    
    20 = TEXT 
    20.value = Weiter zu meiner Seite...
    20.typolink.parameter.field=pid
    20.typolink.parameter.dataWrap=|#{field:uid}
    20.wrap = |</td></tr></table>


     
  }
}
}

lg georg

soundstorm ·

Hallo

Habe das Beispiel ausprobiert, komischerweise zeigt es bei mir nur den Titel der Seite an, verlinkt. ALso, wenn ich einen oder mehrere Ausgangspunkte angebe, werden diese (Seiten)Namen angezeigt mit einer Liste. Wenn ich nichts eingebe, steht root, logisch. 🙂 Es werden aber nur mehrere gelistet, wenn ich die von hand im Ausgangspunkt angebe.

Komisch, oder? Ich kann das neue Sitemap BlaBla auswählen, das ist nicht das Problem. Und der Code muss in die constants, oder?

Fabian-K ·

Hi.
Habe das Ganze so mal ausprobiert 😉

Hab alles moegliche durch.
Ich habe es wie folgt gemacht:

Das kommt in die TSconfig deiner root-Seite (in der Seiteneigenschaft ganz unten):

# neue Sitemap hinzufügen
TCEFORM.tt_content.menu_type {
	addItems.9 = Teaser (Datum, Titel, Description)
	addItems.10 = Teaser (Description)
	addItems.11 = Teaser (Description,Datum)
	addItems.12 = Teaser (Titel)
	addItems.13 = Teaser (Titel,Datum)
	addItems.14 = Teaser (Titel,Description)
	addItems.15 = Teaser (Titel inkl. Link)
}

Dann fuegst du folgendes in das Setup deines Templates ein:

# Teaser (Datum, Titel, Description)
tt_content.menu.20.9 = COA
tt_content.menu.20.9 {
	30 = CONTENT
	30 {
		table = tt_content
	  select {
	    pidInList.field = pages
	    orderBy = tstamp DESC
	  }

	  renderObj = COA_INT
		renderObj {   
			# Datum
			10 = TEXT
			10.field = tstamp
			#10.age = min | Stunden | Tage | Jahre
			10.date = d.m.Y
			10.wrap = <div>Datum:&nbsp; | </div>

			# Titel
			20 = TEXT
			20.field = header
			20.wrap = <div>|<div>

			# Text
			30 = TEXT   
			30.field = bodytext
			30.crop = 350 | ... | 1
			30.wrap= <div>|<div>
			30.parseFunc < tt_content.text.20.parseFunc

			# Link
			40 = TEXT
			40.value = mehr
			40.typolink.parameter.field=pid
			40.typolink.parameter.dataWrap=|#{field:uid}
			40.wrap = <div>&gt;&gt;&nbsp; | <div>

			# Spacer
			41 = TEXT
			41.value = <br><br>
		}
	}
}


# Teaser (Description)
tt_content.menu.20.10 = COA
tt_content.menu.20.10 {
	30 = CONTENT
	30 {
		table = tt_content
	  select {
	    pidInList.field = pages
	    orderBy = tstamp DESC
	  }

	  renderObj = COA_INT
		renderObj {   
			# Text
			30 = TEXT   
			30.field = bodytext
			30.crop = 350 | ... | 1
			30.wrap= <div>|<div>
			30.parseFunc < tt_content.text.20.parseFunc

			# Link
			40 = TEXT
			40.value = mehr
			40.typolink.parameter.field=pid
			40.typolink.parameter.dataWrap=|#{field:uid}
			40.wrap = <div>&gt;&gt;&nbsp; | <div>

			# Spacer
			41 = TEXT
			41.value = <br><br>
		}
	}
}


# Teaser (Datum, Description)
tt_content.menu.20.11 = COA
tt_content.menu.20.11 {
	30 = CONTENT
	30 {
		table = tt_content
	  select {
	    pidInList.field = pages
	    orderBy = tstamp DESC
	  }

	  renderObj = COA_INT
		renderObj {   
			# Datum
			10 = TEXT
			10.field = tstamp
			#10.age = min | Stunden | Tage | Jahre
			10.date = d.m.Y
			10.wrap = <div>Datum:&nbsp; | </div>

			# Text
			30 = TEXT   
			30.field = bodytext
			30.crop = 350 | ... | 1
			30.wrap= <div>|<div>
			30.parseFunc < tt_content.text.20.parseFunc

			# Link
			40 = TEXT
			40.value = mehr
			40.typolink.parameter.field=pid
			40.typolink.parameter.dataWrap=|#{field:uid}
			40.wrap = <div>&gt;&gt;&nbsp; | <div>

			# Spacer
			41 = TEXT
			41.value = <br><br>
		}
	}
}


# Teaser (Titel)
tt_content.menu.20.12 = COA
tt_content.menu.20.12 {
	30 = CONTENT
	30 {
		table = tt_content
	  select {
	    pidInList.field = pages
	    orderBy = tstamp DESC
	  }

	  renderObj = COA_INT
		renderObj {   
			# Titel
			20 = TEXT
			20.field = header
			20.wrap = <div>|<div>

			# Link
			40 = TEXT
			40.value = mehr
			40.typolink.parameter.field=pid
			40.typolink.parameter.dataWrap=|#{field:uid}
			40.wrap = <div>&gt;&gt;&nbsp; | <div>

			# Spacer
			41 = TEXT
			41.value = <br><br>
		}
	}
}


# Teaser (Datum, Titel)
tt_content.menu.20.13 = COA
tt_content.menu.20.13 {
	30 = CONTENT
	30 {
		table = tt_content
	  select {
	    pidInList.field = pages
	    orderBy = tstamp DESC
	  }

	  renderObj = COA_INT
		renderObj {   
			# Datum
			10 = TEXT
			10.field = tstamp
			#10.age = min | Stunden | Tage | Jahre
			10.date = d.m.Y
			10.wrap = <div>Datum:&nbsp; | </div>

			# Titel
			20 = TEXT
			20.field = header
			20.wrap = <div>|<div>

			# Link
			40 = TEXT
			40.value = mehr
			40.typolink.parameter.field=pid
			40.typolink.parameter.dataWrap=|#{field:uid}
			40.wrap = <div>&gt;&gt;&nbsp; | <div>

			# Spacer
			41 = TEXT
			41.value = <br><br>
		}
	}
}


# Teaser (Titel, Description)
tt_content.menu.20.14 = COA
tt_content.menu.20.14 {
	30 = CONTENT
	30 {
		table = tt_content
	  select {
	    pidInList.field = pages
	    orderBy = tstamp DESC
	  }

	  renderObj = COA_INT
		renderObj {   
			# Titel
			20 = TEXT
			20.field = header
			20.wrap = <div>|<div>

			# Text
			30 = TEXT
			30.field = bodytext
			30.crop = 350 | ... | 1
			30.wrap= <div>|<div>
			30.parseFunc < tt_content.text.20.parseFunc

			# Link
			40 = TEXT
			40.value = mehr
			40.typolink.parameter.field=pid
			40.typolink.parameter.dataWrap=|#{field:uid}
			40.wrap = <div>&gt;&gt;&nbsp; | <div>

			# Spacer
			41 = TEXT
			41.value = <br><br>
		}
	}
}


# Teaser (Titel inkl. Link)
tt_content.menu.20.14 = COA
tt_content.menu.20.14 {
	30 = CONTENT
	30 {
		table = tt_content
	  select {
	    pidInList.field = pages
	    orderBy = tstamp DESC
	  }

	  renderObj = COA_INT
		renderObj {   
			# Titel
			20 = TEXT
			20.field = header
			20.wrap = <div>|<div>
			20.typolink.parameter.field=pid
			20.typolink.parameter.dataWrap=|#{field:uid}
		}
	}
}

Jetzt kannst du, wenn du einen Seiteninhalt "Sitemap" anlegst, in den Sitemap-Eigenschaften in dem Auswahlfeld bei "Menü Typ" einen deiner neuen Seitenteaser auswaehlen. Dann waehlst du noch einen (bzw. mehrere) "Ausgangspunkt" (die Seite[n] aus denen die Inhalte ausgelesen werden sollen) aus, und dann speichern und fertig 🙂

Was genau ausgegeben werden soll, legst du im oben stehenden Typoscript fest.
Hab einfach mal alle Beispiele, die mir auf die Schnelle einfielen, erstellt.

Einfach mal ausprobieren.
Ist ganz nice 🙂

Wie man das ganze allerdings rekursiv macht (also dass auch die Unterseiten "geteased" werden), kann ich dir leider nicht sagen.. Weiss ich nicht..

Da muesstest du nochmal unseren Typo3-Terroristen just2b fragen 😉

Hmm..

just2b:
Wie kann ich das ganze rekursiv machen? :p

mfg
Fabian

P.S.:
Ab Typo3 4.0.x sind (soweit ich weiss) standartmaessig 8 Punkte in der Sitemap-Auswahlliste vorhanden, also muss mit addItems.9 begonnen werden. Kann auch sein, dass ich unbewusst eine Extension installiert habe, welche automatisch einen achten Auswahlpunkt 'installiert' hat.. aber egal.. sicher ist sicher 😉 )

just2b ·

Hallo,

rekursiv kannst du das nur mit einer userfunction machen. Ich poste dann noch ein Beispiel, dauert aber noch bisschen 😉

lg georg

soundstorm ·

Danke für die Posts, hat nun auch bei mir geklappt. 8-)

Ich habe noch Extensions gesucht zum Thema Teaser, es hat ja ein paar. Bei allen muss man aber spezielle Records machen oder zumindest einen Previewtext eingeben unter adv. page Eigenschaften, das ist mühsam. Habe nun eine gefunden, welche vollautomatisch läuft, ist allerdings Alpha, und hat diese Features:

- es muss kein record oder sonst was spezielles eingeben werden. einfach plugin einfügen, ausgangspunkt angeben, fertig.
- ganzer Ast wird erfasst (rekursiv, weiss allerdings nicht wie tief)
- auto. preview text von content
- bei text mit bild wird automatisch das bild (oder die bilder..) als kleine thumb genommen! Cool! #giggle#
- mehrere bilder möglich
- Bilder können auch über advanced page eigenschaften eingeben werden

Das Ding heisst b.it Pagemenu und ich habs momentan hier drauf:
http://www.doj.ch/typo3/index.php?id=37
(Der erste oberste Text hat das Image in den erw. Seiteneingenschaften, der 2. hat es als Text mit Bild.)
Einzig wenn man ein Bild normal im Text einfügt wie im 3. Textblock, dann erscheint es nicht als Thumb.

Ich find die Extension sehr praktisch, habe auch keine Fehler entdeckt bis jetzt. Fehlt nur noch, dass man bei x Einträgen blättern könnte.. #paralyzed#

grüsse
phil

Fabian-K ·

Ich bin so ein typischer Linuxuser, wuerde ich mal behaupten.
Ich brauche die volle Kontrolle, also keine Extension, sondern alles manuell im TS konfigurieren :p

@just2b:
Schon eine Idee, wie man das rekursiv-Thema loesen koennte?

just2b ·

was heißt idee? schon fertig 😉
gedulde nur noch etwas, kleinigkeit fehlt noch

lg georg
ps: dann wär wohl ein selbstgeschriebenes CMS besser 😃

Fabian-K ·
just2b schrieb

dann wär wohl ein selbstgeschriebenes CMS besser 😃

habe ich schon 😉

Oka, okay.. *ungeduldig wart*

Is ja schlimmer, als sich an Heilig Abend ne Stunde in die Kirche zu hocken und zu hoffen, dass es endlich vorbei ist, um nach hause zu duesen, weil man heftigsten Hunger hat. lol.
Bloeder vergleich, irgendwie #angry# :p

just2b ·

Hallo,

Folgendes Beispiel macht:
eine Sitemap/Teaser aus ausgewählten Seiten.

Code in der TsConfig
# neue Sitemap hinzufügen

TCEFORM.tt_content.menu_type {
addItems.102 = rgTeaser II
}

Code im Setup

# php-Datei für die userfunction einbinden
includeLibs.user_getpages = fileadmin/dev/scripts/user_getpages.inc 

# neue Sitemap erstellen
tt_content.menu.20.102 = CONTENT
tt_content.menu.20.102 {

    # 1. Abfrage basierend auf den Seiten
    table = pages
    select {

    # pidinlist > userfunction um eine Rekursion zu erhalten auf die gewählten Ausgangspunkte in Sitemap
    pidInList.cObject = USER
    pidInList.cObject {
    userFunc = user_getpages->main
    treeDepth = 3
    }
	
	
        orderBy = tstamp DESC
        #where = tx_rgteaser_teaser = 1   
    }

    # Darstellung der SEITEN
    renderObj = COA_INT
    renderObj {
        # an Stelle 10 der Seiten-titel
        10 = TEXT
        10.field = title
        10.wrap = <div style="border:1px solid #ccc; padding:10px;margin:5px;"><h3>|
        
        # Stelle 12 das Alter der Seite
        12 = TEXT
        12.field = tstamp
        12.age = 1
        12.required = 1
        12.wrap = <span style="font-size:10px;padding-left:10px;">(|)</span></h3>
        
        # Wir merken uns die Seiten-ID für später
        20 = LOAD_REGISTER
            20 {
            meinRegister.cObject = TEXT
            meinRegister.cObject.field= uid
        }    

        # an Stelle 50 wird der Seiteninhalt erzeugt        
        50 = COA 
        50 {
          ###########
          20 = CONTENT
          20 {
              # Abfrage an Tabelle tt_content = Seiteninhalt
              table = tt_content
              select {
                  # wir holen uns die die Seitenid von vorher
                  pidInList.data = register:meinRegister
                  #max = 1
              }

              # Wie soll der Seiteninhalt gerendert werden          
              renderObj = COA
              renderObj {
                  # Stelle 1 mal ein div aufmachen
                  1 = TEXT
                  1.value = <div style ="padding:5px; margin:5px;">
                  
                  # Stelle 10 der Titel des Contentelements
                  10 = TEXT
                  10.field = header
                  10.wrap = <strong>|</strong>
                  10.required = 1
                  
                  # Stelle 20 der Text, beschränkt auf 350 Zeichen
                  20 = TEXT   
                  20 {
                    field = bodytext
                    crop = 350 | ... | 1
                    wrap= <br />|
                    parseFunc < tt_content.text.20.parseFunc
                    stripHtml = 1
                  }
                  
                  /*
                  30 = TEXT
                  30 {
                    value = [mehr]
                    typolink.parameter.field=pid
                    typolink.parameter.dataWrap=|#{field:uid}
                    wrap = |
                  }
                  */

                  # Div wieder zu
                  99 = TEXT
                  99.value = </div>

              }
          }                      
          ###########            
        }
      
        # Stelle 60 (nach den contentelementen) ein Link zur Seite
        60 = TEXT
        60 {
          value = [mehr]
          typolink.parameter.field=uid
          wrap = |
        }
                      
        99 = TEXT
        99.wrap = |</div>
    
    }
}

benötigte Userfunction
speichern in zB fileadmin/dev/scripts/user_getpages.inc

<?php

class user_getpages {

  function main($content,$conf) {
    global $TSFE; 
    $pid_list_arr = explode(",",$this->cObj->data['pages']);
    $pid_list="";
    
    while(list(,$val)=each($pid_list_arr)) {
      $pid_list.=$val.",".$this->cObj->getTreeList($val,$conf["treeDepth"]);
    }
    
    $pid_list = ereg_replace(",$","",$pid_list);
    return $pid_list;


  
  }
}
?>

lg georg
PS: nicht alles was hinkt ist ein Vergleich, mehr will ich da dazu nicht sagen!

soundstorm ·

HAllo

Die Extension ist super, vielen Dank dafür.

Ich hätte noch eine kleine Bitte:
Momentan scheint die Extension keine Mehrsprachigkeit zu unterscheiden. Es werden jeweils beie Sprachen gleichzeitig dargestellt, oder seh ich das falsch? Kann man das noch korrigieren? Wär super.