Zum Inhalt springen

RealUrl - neue Variable

Erstellt am 20. November 2005 · 17 Antworten · letzte Antwort am 19. Mai 2008

Tags: Frage

steffenk ·

na dann doch so:

'buchstabe' => array(
  array(
    'GETvar' => 'm',
  ),
),

und ich häng meine Frage an:

ich hab aufgrund meines Seitenbaumes urls wie
domain/topmenue/punkt1/...

jetzt möchte ich topmenue in der url ausblenden, ist das möglich ?

vince123 ·
steffenK schrieb

ich hab aufgrund meines Seitenbaumes urls wie
domain/topmenue/punkt1/...

jetzt möchte ich topmenue in der url ausblenden, ist das möglich ?

Zumindest per Hand habe ich eine Lösung, denn Du kannst in den neuen Versionen von RealUrl ja unter Web>Info>Speaking URL Management die Pfade bearbeiten. Dort kannst Du dann nicht gewünschte Ebenen aus dem Pfad löschen.

steffenK schrieb

na dann doch so:

'buchstabe' => array(
  array(
    'GETvar' => 'm',
  ),
),

Danke, aber so wird das nichts. Denn "m" ist ja der Wert(!) der Variable. Den kenne ich ja vorher gar nicht. Ich möchte nur "buchstabe" loswerden... Konkreter: Bei tt_news möchte ich kein "article" drin stehen haben.

Gruß,
Guido

theo ·
vince123 schrieb

Zumindest per Hand habe ich eine Lösung, denn Du kannst in den neuen Versionen von RealUrl ja unter Web>Info>Speaking URL Management die Pfade bearbeiten. Dort kannst Du dann nicht gewünschte Ebenen aus dem Pfad löschen.

Theoretisch ja.
In der Praxis hast Du allerdings bei jeder Regenerierung der urls wieder die alten Pfade drin...

vince123 ·
theo schrieb

Theoretisch ja.
In der Praxis hast Du allerdings bei jeder Regenerierung der urls wieder die alten Pfade drin...

Völlige Übereinstimmung ;-) Um über eine komplette Site Pfade zu ändern, ist das Vorgehen sicher nicht geeignet. Allerdings auf einer speziellen Seite würde ich das bei einem RealUrl-Reset dann durchaus jeweils wieder ändern...

steffenk ·

versteh ich das richtig, das es dazu keine praktische Lösung gibt ? Die Pfadangabe wird doch nicht gebraucht, da sie keinen Parameter enthält. Ich dachte, das könnte man auch irgendwie in dem Array definieren ...

ich hatte auch probiert, die Seiten mit "nicht im Menü" zu belegen, aber realurl ist das wohl wurscht

vince123 ·

Eine Ebene auslassen, so wie Du das möchtest, wenn ich Dich richtig verstanden habe, geht meines Wissens nicht. Du kannst nur völlig auf Pfadangaben verzichten und nur mit Dateinamen arbeiten. Dann hast Du eben domain.de/punkt1.html usw. ohne "topmenue". Aber wenn es dann noch eine 3. Ebene gibt, hast Du dort auch keinen Pfad, sondern domain.de/punkt1a.html usw..

steffenk ·

und was ist damit ? laut doku müsste das doch gehen, will aber bei mir nicht funktionieren:

'pagePath' => array(
        'type' => 'user',
        'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
        'spaceCharacter' => '-',
        'languageGetVar' => 'L',
        'expireDays' => 3,
		'excludePageIds' => '2,3,69'

    ),

excludePageIds ist der Parameter: Comma list of page ids to exclude from being realurl rendered. The list must NOT contain any spaces between page id numbers!

oder versteh ich das falsch ?

theo ·
steffenK schrieb

versteh ich das richtig, das es dazu keine praktische Lösung gibt ?

Zumindest keine, die mir bekannt ist... 😉
Dabei fände ich das ebenfalls sehr hilfreich, da ich z.B. Verzeichnisbäume hier und da in Sysfoldern starten lasse, und der Name des Folders wird leider dann (natürlich) immer ebenfalls angezeigt.

Sehr ärgerlich...

theo ·
steffenK schrieb

...
oder versteh ich das falsch ?

Aber ich denke, daß da eher die komplette Extension ausgeklammert werden kann, also nicht der Teil des Pfades, der die angegebenen ids betrifft.

steffenk ·

klar probier ich das 🙂

und es geht nicht. Anscheinend betrifft das nich die ID's, die im Baum vorkommen sondern die Zielseiten, die dann nicht übersetzt werden.

... ich lass aber nicht locker, weil es ärgert mich schon ! #evil#

steffenk ·

also auf konventionellem Weg geht das nicht, aber hier ein Lösungsansatz:

Introducing tx_realurl_jk (vollständiges file auf
http://stud4.tuwien.ac.at/~e0326697/tx_realurl_jk.zip bitte testen!)
Verwendung: Die Datei in den RealUrl ordner kopieren und in der localconf.php
bei:
'pagePath' => array(
'type' => 'user',
'userFunc' =>
'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',

statt class.tx_realurl_advanced class.tx_realurl_jk einfügen (2 mal).

Wie funktionierts:
Wenn eine Url erzeugt wird, wird überprüft ob in der Rootline ein Element ist
das nicht hinein soll (also entweder einen doktype oder eine pid hat der/die
exkludiert werden soll) wird es (in der Funktion removeFromRootline() ) aus
der Rootline entfernt. Die Rootline wird danach wieder "gefixt" (pid des
Kindes = pid des entfernten Elements, Array Indexes werden umkopiert). Der
Aufruf von removeFromRootline() erfolgt in IDtoPagePathSegments().

Beim dekodieren einer URL wird in searchTitle_searchPid() ein Datenbankaufruf
entfernt und stattdessen getRowsForPidSearch() aufgerufen. Das führt den
Datenbankaufruf durch und kopiert das ergebniss in $rows[] das dann
zurückgegeben wird. Währenddessen sucht es auch nach doktypes/pids die
entfernt wurden. Findet es einen kopiert es alle Kinder dieses Elements
ebenfalls in $rows[].

Das ist eine "works for me" Lösung. Ich habe sie bis jetzt nur in der
Standardkonfiguration bei einer relative einfachen Seite getestet. Es sollte
aber eigentlich überall funktionieren wo es realurl auch tut. Probleme könnte
es geben wenn ein exkludierter Eintrag einen Untereintrag hat der gleich
heißt. In diesem Fall könnte es helfen 'excludeIfLast' auf true zu setzen (Das
ist dafür zuständig das die letzten Einträge auf keinen Fall entfernt werden).

droptix ·

OK soweit. Habe also die Beispiel-localconf von tt_news genommen (tt_news -> res/realUrl_example_setup.txt) und die Zeile wie beschrieben angepasst. Die folgenden Zeilen habe ich in meine typo3conf/localconf.php eingefügt (kompletter Code s.u.).

In der Datei class.tx_realurl_jk_0_0_2.php befand sich noch dieser wertvolle Hinweis, den ich befolgt habe: "IMPORTANT: Delete all data from the tx_realurl_* tables."

Trotzdem werden noch SysFolder in der URL angezeigt. Ich habe realURL noch nicht weiter in meinem TS-Setup konfiguriert. Was fehlt noch, damit SysFolder aus der URL ausgeblendet werden?

/**
* Real Url config for tt_news
*
* This config file includes the new GETvars 'month' and 'day' (available since tt_news 2.2.0)
* and it does not include a configuration for the tt_news backPid.
*
* this configuration requires that tt_news is configured to use this options:
*
* plugin.tt_news {
*   dontUseBackPid = 1
*   useHRDates = 1
* }
*
* see section "RealUrl and SimulateStaticDocuments" in the tt_news manual for more information.
* http://typo3.org/documentation/document-library/tt_news/
*
*/

$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array(
	'_DEFAULT' => array(
		'init' => array(
			'enableCHashCache' => 1,
			'appendMissingSlash' => 'ifNotFile',
			'enableUrlDecodeCache' => 1,
			'enableUrlEncodeCache' => 1,
		),
		'redirects' => array(),
		'preVars' => array(
			array(
				'GETvar' => 'no_cache',
				'valueMap' => array(
					'nc' => 1,
				),
				'noMatch' => 'bypass',
			),
			array(
				'GETvar' => 'L',
				'valueMap' => array(
					'dk' => '2',
					'de' => '1',
				),
				'noMatch' => 'bypass',
			),
		),
		'pagePath' => array(
			'type' => 'user',
###### include tx_realurl_jk instead of tx_realurl_advanced
			#'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
			'userFunc' => 'EXT:realurl/class.tx_realurl_jk_0_0_2.php:&tx_realurl_jk->main',
			'spaceCharacter' => '-',
			'languageGetVar' => 'L',
			'expireDays' => 7,
###### include your rootpage id here
			'rootpage_id' => 1,
		),
		'fixedPostVars' => array(),
		'postVarSets' => array(
			'_DEFAULT' => array(
				// news archive parameters
				'archive' => array(
					array(
						'GETvar' => 'tx_ttnews[year]' ,
						),
					array(
						'GETvar' => 'tx_ttnews[month]' ,
						'valueMap' => array(
							'january' => '01',
							'february' => '02',
							'march' => '03',
							'april' => '04',
							'may' => '05',
							'june' => '06',
							'july' => '07',
							'august' => '08',
							'september' => '09',
							'october' => '10',
							'november' => '11',
							'december' => '12',
							)
						),
					),
				// news pagebrowser
				'browse' => array(
					array(
						'GETvar' => 'tx_ttnews[pointer]',
						),
					),
				// news categories
				'select_category' => array (
					array(
						'GETvar' => 'tx_ttnews[cat]',
						),
					),
				// news articles and searchwords
				'article' => array(
					array(
						'GETvar' => 'tx_ttnews[tt_news]',
						'lookUpTable' => array(
							'table' => 'tt_news',
							'id_field' => 'uid',
							'alias_field' => 'title',
							'addWhereClause' => ' AND NOT deleted',
							'useUniqueCache' => 1,
							'useUniqueCache_conf' => array(
								'strtolower' => 1,
								'spaceCharacter' => '-',
								),
							),
						),
					array(
						'GETvar' => 'tx_ttnews[swords]',
						),
					),
				),
			),
		// configure filenames for different pagetypes
		'fileName' => array(
			'defaultToHTMLsuffixOnPrev' => true,
			'index' => array(
				'rss.xml' => array(
					'keyValues' => array(
						'type' => 100,
					),
				),
				'rss091.xml' => array(
					'keyValues' => array(
						'type' => 101,
					),
				),
				'rdf.xml' => array(
					'keyValues' => array(
						'type' => 102,
					),
				),
				'atom.xml' => array(
					'keyValues' => array(
						'type' => 103,
					),
				),
			),
		),
	),
);