Zum Inhalt springen

RealUrl - neue Variable

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

Tags: Frage

jr-ewing ·

Hallo,

ich habe bei mir Realurl installiert und soweit auch am Laufen.

Jetzt möchte ich einen eigenen Parameter übergeben der auch umgeschrieben werden soll.

Der Aufruf ohne RealUrl funktioniert bereits.

index.php?id=97&buchstabe=m

Wie krieg ich das jetzt hin ?

Wie muss dann die Url aussehen um den Aufruf testen zu können ?

Hier mal mein Denkansatz:

index.php?id=97
ist unter
/home/branche/
zu erreichen.

Dann müsste die Url dann so aussehen ?

/home/branche/buchstabe/m/

Ich habe in der localconf unter
postVarSets die neue Variable buchstabe deklariert.
Hier ist mal der Auszug:

$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array(
    'www.meine-domain.de' => 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',
            'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
            'spaceCharacter' => '-',
            'languageGetVar' => 'L',
            'expireDays' => 7,
            'rootpage_id' => 12,
        ),
        '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]',
                        ),
                    ),
				'buchstabe' => array(
					array(
						'GETvar' => 'buchstabe'
						),
					),
                ),
        // configure filenames for different pagetypes
			'fileName' => array(
				'index' => array(
				),
				'_DEFAULT' => array(
					'keyValues' => array(
					)
				),
				// add .html suffix to the end of the path generated
				'defaultToHTMLsuffixOnPrev' => 1,
		   ),
        ),
    ),
);

An welcher Stelle kann ich denn im Quellcode Ausgaben machen um zu sehen ob die Variable gesetzt ist ?

echo "id: " . $id . "<br />";
echo "buchstabe: " . $buchstabe . "<br />";

Die Variable Buchstabe wird in einem TYPOSCRIPT ausgewertet.

Welche Informationen braucht ihr noch damit mir jemand helfen kann ?

Bitte helft mir !!! Bin ziemlich am Verzweifeln....

Gruß
JR

woida ·
'buchstabe' => array(
  array(
    'GETvar' => 'buchstabe',
  ),
),

nach Zeile 38 könnte funktionieren.

Schon mal die realURL-Doc gelesen?

jr-ewing ·

Erstmal danke für die Hilfe !!

woida schrieb
'buchstabe' => array(
  array(
    'GETvar' => 'buchstabe',
  ),
),

nach Zeile 38 könnte funktionieren.

Okay probier ich mal aus.

woida schrieb

Schon mal die realURL-Doc gelesen?

ja aber nicht sonderlich schlau daraus geworden.
Immerhin habe ich RealUrl zum Laufen gebracht :-)
Und im Netz gibt es keine guten Beispiele. Nur alle mit tt_news.

Müsste die Url dann so aussehen ?
/home/branche/buchstabe/m/

Gruß
JR

vince123 ·

Erlaube mir, hier gerade mal eine Frage anzufügen.

RealUrl läuft bestens bei mir, auch mit "neuen Variablen" aus weiteren Extensions. Frage ist:

jr-ewing schrieb

Müsste die Url dann so aussehen ?
/home/branche/buchstabe/m/

Ich hätte nun gern eine URL: /home/branche/m/ Ich möchte also nur den Wert in die URL aufgenommen haben, aber nicht den Variablennamen. Ist das möglich? Bei mir werden die Links sonst zu lang und unübersichtlich.

Gruß,
Guido

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,
					),
				),
			),
		),
	),
);