Zum Inhalt springen

3 Ebene durchnumerieren

Erstellt am 10. September 2006 · 10 Antworten · letzte Antwort am 29. März 2008

Tags: Frage

anj ·

Hallo!

Ich suche nach einer Möglichkeit meine 3te Ebene (Inhaltselemente) durchzunumerieren für Seitenzahlen in einem generiertem PDF.

Ein Inhaltselement = 1 Seite.

Mein aktuelles Menü:

lib.navigation1 = HMENU
lib.navigation1.entryLevel = 0
lib.navigation1.wrap = <ul>|</ul>
# Level 1
lib.navigation1.1 = TMENU
lib.navigation1.1 {
 wrap = <li><h2 class="toc">Inhaltsverzeichnis</h2></li>|
 NO{
  allWrap = |
  doNotShowLink = 1
 }
}
# Level 2
lib.navigation1.2 = TMENU
lib.navigation1.2 {
  expAll = 1
   noBlur = 1
      NO{
      linkWrap = |
      doNotShowLink = 1     
      before.cObject = TEXT
      before.cObject.dataWrap = <li class="two"><a href="index.php?id={page:uid}#anker{field:uid}">
      after.cObject = TEXT
      after.cObject.field = title
      after.cObject.wrap =  |</a></li>
      }
}
# Level 3
lib.navigation1.3 = TMENU
lib.navigation1.3 {
sectionIndex = 1
sectionIndex.type = "all"
   expAll = 1
   NO{
      linkWrap = |
      doNotShowLink = 1     
      before.cObject = TEXT
      before.cObject.dataWrap = <li class="three">{register:count_MENUOBJ}<a href="index.php?id={page:uid}#anker{field:uid}">
      after.cObject = TEXT
      after.cObject.field = title
      after.cObject.wrap =  |</a></li>
     }
}

MEine Versuche mit register:count_MENUOBJ bzw. den anderen count_* registern hat ergeben, das ich mir wohl meinen eigenen Counter bauen muss, da es ALLE Elemente Zählt... und ich ja nur die Inhaltselemente zählen möchte...

Habe ein paar Beispiele gefunden, allerdings weiss ich nicht wie ich die in das Menü der 3ten Ebene vernünftig einbauen soll:

countObj = COA
  countObj {
    # Zähler starten/aktualisieren
    10 = LOAD_REGISTER
    10.zaehler.cObject = TEXT
    10.zaehler.cObject.data = register:zaehler
    10.zaehler.cObject.wrap = |+1
    10.zaehler.prioriCalc = intval
    # Zahl ausgeben...
    20 = TEXT
    20.insertData = 1
    20.value = {register:myCounter}
  }

Eine andere Möglichkeit wäre noch mit cObj:parentRecordNumber
allerdings soll es angeblich nur mit dem CONTENT Typ gehen??? Stimmt das?

temp.Counter = CONTENT
temp.Counter {
  table = pages
  select {
    pidInList = 0
  }
  renderObj = TEXT
  renderObj.dataWrap = {cObj:parentRecordNumber},
}

Habt ihr vielleicht ein Vorschlag für mich?

anj ·

Habe eine Lösung gefunden: (falls es überhaupt jemanden Interessiert):

Achtet dabei besonders auf die 5 = LOAD_REGISTER, die den register "Counter" am Anfang auf 1 setzt. Später wird im Menü jeweils 1 dazu adiert.

Hoffe jemandem geholfen zu haben, und ersprare ihm meine Blindheit ... #angry#

##################################################################
# Hauptmenu: lib.navigation1
##################################################################

lib.navigation1 = COA
lib.navigation1{
#Counter Initialwert
5 = LOAD_REGISTER
5{
	Counter = 1
}
10 = HMENU
10{
entryLevel = 0
wrap = <ul>|</ul>
# Level 1
	1 = TMENU
	1 {
	 wrap = <li><h2 class="toc">Inhaltsverzeichnis</h2></li>|
	 NO{
	  allWrap = |
	  doNotShowLink = 1
	 }
	}
# Level 2
	2 = TMENU
	2 {
	  expAll = 1
	   noBlur = 1
	NO{
	      linkWrap = |
	      doNotShowLink = 1     
	      before.cObject = TEXT
	      before.cObject.dataWrap = <li class="two"><a href="index.php?id={page:uid}#anker{field:uid}">
	      after.cObject = TEXT
	      after.cObject.field = title
	      after.cObject.wrap =  |</a></li>
      }
}
# Level 3
	3 = TMENU
	3 {
	   sectionIndex = 1
	   sectionIndex.type = "all"
	   expAll = 1
	   NO{
	      stdWrap.cObject = COA
	      stdWrap.cObject {
	        10 = LOAD_REGISTER
	        10{
	        Counter.cObject = TEXT
	        Counter.cObject.data = register:Counter
	        Counter.cObject.wrap = |+1
	        Counter.prioriCalc = intval
	        }
	      } 
	      linkWrap = |
	      doNotShowLink = 1     
	      before.cObject = TEXT
	      before.cObject.dataWrap = <li class="three">{register:Counter}...................<a href="index.php?id={page:uid}#anker{field:uid}">
	      after.cObject = TEXT
	      after.cObject.field = title
	      after.cObject.wrap =  |</a></li>
	     }
	}
}
manuelB ·

ich stehe vor nem ähnlichen Problem. Ich muss Content Elemente auf ner Seite durchnummerieren.

bisher sehen die dinger so aus:

INHALT = TEXT
INHALT < styles.content.get
INHALT.renderObj.stdWrap.wrap=<div class="cElement"><span class="top"></span><div class="bg">|</div><span class="bottom"></span></div>

ich gehe mal davon aus das das was ich dazu brauche sich in diesem Teil hier versteckt:

lib.navigation1 = COA
lib.navigation1{
	5 = LOAD_REGISTER
	5 {
		Counter = 1
	}
	
	NO {
		stdWrap.cObject = COA
		stdWrap.cObject {
			10 = LOAD_REGISTER
			10{
				Counter.cObject = TEXT
				Counter.cObject.data = register:Counter
				Counter.cObject.wrap = |+1
				Counter.prioriCalc = intval
			}
		}
		before.cObject = TEXT
		before.cObject.dataWrap = <li class="three">{register:Counter}...................<a href="index.php?id={page:uid}#anker{field:uid}">
	}

}

nur wie schreibe ich das ganze jetzt so um das es mir meine content-elemente durchnummeriert? :o #angry#

anj ·

Hi, brauchst du die Numerierung im "Inhaltsverzeichnis" also quasi aus einem HMENU oder ähnliches heraus? oder musst du wissen welche Nummer das gerade aktuelle Inhaltselement hat?

Ich habe nämlich das Problem das ich für beides eine Lösung brauchte. Die Lösung für das Inhaltsverzeichnis siehst du bereits in diesem Thread, die andere Geschichte findest du auf Typo3.org: pm_pagenumber: http://typo3.org/extensions/repository/view/pm_pagenumber/0.0.1/

Allerdings ist es noch eine frühe Alpha version :/

Zur Nutzung: Installieren, Plugin irgendwo im Baum einfügen -> damit setzt du quasi den Zähler auf eine Startzahl. Z.B. 1. Dann musst du dir nur noch die Ausgabe holen über z.B.:

ausgabe < plugin.tx_pmpagenumber_pi1

Damit holt sich das Inhaltselement seine Nummer ab und stellt sie dar. Da ich es aber mit TemplaVoila genutzt habe, müsstest du etwas im PHP ändern. Siehe einfach auch die README.txt, oder die nächste Version abwarten 😃

manuelB ·

nene. seitenzahlen und so brauch ich garnich. nich so kompliziert. ich brauch einfach nur n kleines typoscriptchen mit dem ich die contentelemente auf ner seite durchnummerieren kann. das ich dann bei z.b. 3 contentelementen auf einer seite da stehen habe:

<div class="contentelement-1"></div>
<div class="contentelement-2"></div>
<div class="contentelement-3"></div>

bei 5 contentelementen
<div class="contentelement-1"></div>
<div class="contentelement-2"></div>
<div class="contentelement-3"></div>
<div class="contentelement-4"></div>
<div class="contentelement-5"></div>

und so weiter. die nummerierung sollte möglichst bei 1 anfangen und auf jeder seite von neuem gleich sein. geht darum das ich ein template habe mit einer "übersichtsseite" auf der sich je nach rubrik 4-6 kleine teasertexte befinden. die sollen jeweils mit anderem hintergrund hinterlegt sein. daher brauch ich die durchnummerierung das ich das aussehen der boxen per CSS steuern kann.

anj ·

Achso, dann schau dir einfach das Beispiel in diesem Thread an... damit kriegst du das hin was du willst.

manuelB ·

hm ja. aus diesem grund hab ich in dem thread hier gepostet. ich bin allerdings nicht so der typoscript experte und hab n bißchen probleme mir das passend umzuschreiben.

so sieht mein modifiziertes typoscript jetzt aus:

page.10 = TEMPLATE
page.10 {
	marks {
			INHALT = COA
			INHALT {
					5 = LOAD_REGISTER
					5 {
							Counter = 1
					}
			
					stdWrap.cObject = COA
					stdWrap.cObject {
						10 = LOAD_REGISTER
						10 {
							Counter.cObject = TEXT
							Counter.cObject.data = register:Counter
							Counter.cObject.wrap = |+1
							Counter.prioriCalc = intval
						}
					}
			
					cObject = TEXT
					cObject < styles.content.get
					cObject.stdWrap.wrap = <div class="cElement e{register:Counter}"><span class="top"></span><div class="bg">|</div><span class="bottom"></span></div>
			
					}
			}

	}
}

damit gehts aber nich. was ich ehrlichgesagt auch nicht anders erwartet hätte 😃
haste ne idee wo ich da entsprechend ändern muss um zum ziel zu kommen. vorher hatte ich das hier benutzt:

INHALT = TEXT
INHALT < styles.content.get
INHALT.renderObj.stdWrap.wrap=<div class="cElement"><span class="top"></span><div class="bg">|</div><span class="bottom"></span></div>

aber da wird halt nichts durchnummeriert. 😢

anj ·

hmmm, da bin ich leider auch nicht der Experte drin 🙁

Generelle sieht es aber so aus:

zuerst muss der Counter einmalig Initialisiert werden ... das kannst du genausogut mit:

page.1 = LOAD_REGISTER
page.1.Counter = 2

Danach wird mittels stdWrap.cObjec darauf zugegriffen und mittels wrap immer einen hochgezählt ...

Als letzten schritt fügt man mit dataWrap diesen Wert schliesslich ein. Bei meinen versuchen dieses Menü aufzubauen weiss ich noch dass es viel Gedult benötigt ... :/ Soweit ich mich erinnern kann war es wichtig mit after.cObject zu arbeiten ... ein normales stdWrap hat bei mir nicht ausgereicht.

Suche auch mal bei Google nach Load_register und typo3 ... so kam ich damals zu meiner Lösung.

sventb ·

Danke für das Beispiel!

Bei mir ging es allerdings erst, nachdem ich

sectionIndex = 1
sectionIndex.type = "all"

auskommentiert hatte.

TheFreeman ·

Ich würde das gerne bei meinem Mailformular verwenden. Wie muss ich den das da machen?
Mein Ansatz dazu ist folgender:

tt_content.mailform {
	1 = LOAD_REGISTER
	1.Counter = 1
}

temp.splitter {
	token = #
	cObjNum = 1
	1.current = 1
	1.stdWrap.cObject = COA
	1.stdWrap.cObject {
		10 = LOAD_REGISTER
		10{
			Counter.cObject = TEXT
			Counter.cObject.data = register:Counter
			Counter.cObject.wrap = |+1
			Counter.prioriCalc = intval
	}
	1.cObject = TEXT
	1.cObject.dataWrap = <div id="formid{register:Counter}">|</div>
}

tt_content.mailform.20 {
	data.split < temp.splitter
	layout ( 
		<table>
			<tr>
				<td class="tdlabel" align=right>###LABEL###</td>
				<td class="raum"></td>
				<td class="field">###FIELD###</td>
			</tr>
		</table>
	)
	params 		= class="eingabe" onfocus="if (this.value==this.defaultValue) this.value=''"
	stdWrap.wrap 	= <table border="0" cellspacing=0 cellpadding=0 class="formtbl">|</table>
	badMess 	= Bitte alle [*] erforderlichen Felder ausfüllen : 
	emailMess 	= Das ist keine gültige Email-Adresse!
}