<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://de.contaowiki.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://de.contaowiki.org/index.php?action=history&amp;feed=atom&amp;title=Strukturierte_URLs</id>
		<title>Strukturierte URLs - Versionsgeschichte</title>
		<link rel="self" type="application/atom+xml" href="https://de.contaowiki.org/index.php?action=history&amp;feed=atom&amp;title=Strukturierte_URLs"/>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/index.php?title=Strukturierte_URLs&amp;action=history"/>
		<updated>2026-05-06T08:47:03Z</updated>
		<subtitle>Versionsgeschichte dieser Seite in Contao Community Documentation</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://de.contaowiki.org/index.php?title=Strukturierte_URLs&amp;diff=4590&amp;oldid=prev</id>
		<title>BugBuster: Kategorie</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/index.php?title=Strukturierte_URLs&amp;diff=4590&amp;oldid=prev"/>
				<updated>2011-11-25T19:34:40Z</updated>
		
		<summary type="html">&lt;p&gt;Kategorie&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 25. November 2011, 19:34 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Admin_HOWTOS]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Strukturierte URLs=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Strukturierte URLs=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>BugBuster</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/index.php?title=Strukturierte_URLs&amp;diff=4587&amp;oldid=prev</id>
		<title>Tril: Die Seite wurde neu angelegt: „=Strukturierte URLs=  In diesem Artikel geht es darum, wie man aus den klassischen Contao URLs &lt;code&gt;/reader/items/alias.html&lt;/code&gt; z.B. URLs dieser Form macht &lt;…“</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/index.php?title=Strukturierte_URLs&amp;diff=4587&amp;oldid=prev"/>
				<updated>2011-11-25T07:34:21Z</updated>
		
		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „=Strukturierte URLs=  In diesem Artikel geht es darum, wie man aus den klassischen Contao URLs &amp;lt;code&amp;gt;/reader/items/alias.html&amp;lt;/code&amp;gt; z.B. URLs dieser Form macht &amp;lt;…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Strukturierte URLs=&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel geht es darum, wie man aus den klassischen Contao URLs &amp;lt;code&amp;gt;/reader/items/alias.html&amp;lt;/code&amp;gt; z.B. URLs dieser Form macht &amp;lt;code&amp;gt;/reader/2011/Feb/alias.html&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies lässt sich sowohl für News, Events und andere Reader basierte Extensions machen.&lt;br /&gt;
&lt;br /&gt;
Zunächst gehe ich davon aus, dass die '''Reader Page ID 5''' und dem '''Alias leser''' ist.&lt;br /&gt;
Außerdem geht es um die Domain '''blog.example.com''', auf der '''News''' angezeigt werden (das Prinzip lässt sich einfach auf andere Module adaptieren).&lt;br /&gt;
&lt;br /&gt;
Zuerst muss eine kleine Erweiterung erstellt werden:&lt;br /&gt;
&lt;br /&gt;
'''system/modules/customurls/config/config.php'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Hooks&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['TL_HOOKS']['generateFrontendUrl'][] = array('CustomURLs', 'hookGenerateFrontendUrl');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['getPageIdFromUrl'][]    = array('CustomURLs', 'hookGetPageIdFromUrl');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''system/modules/customurls/CustomURLs.php'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
class CustomURLs extends Frontend&lt;br /&gt;
{&lt;br /&gt;
  /**&lt;br /&gt;
   * @var Database;&lt;br /&gt;
  */&lt;br /&gt;
  protected $Database;&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param array $arrRow&lt;br /&gt;
   * @param string $strParams&lt;br /&gt;
   * @param string $strUrl&lt;br /&gt;
   * @return string&lt;br /&gt;
   */&lt;br /&gt;
  public function hookGenerateFrontendUrl($arrRow, $strParams, $strUrl)&lt;br /&gt;
  {&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param array $arrFragments&lt;br /&gt;
   * @return array&lt;br /&gt;
   */&lt;br /&gt;
  public function hookGetPageIdFromUrl($arrFragments)&lt;br /&gt;
  {&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir eine Klasse CustomURLs erstellt, welche auf die beiden HOOKs '''generateFrontendUrl''' und '''getPageIdFromUrl''' registriert ist.&lt;br /&gt;
Mit '''generateFrontendUrl''' werden wir die URL umschreiben, während '''getPageIdFromUrl''' die URL zurück transformieren wird.&lt;br /&gt;
&lt;br /&gt;
In meinem Fall soll die URL von '''leser/items/''alias''.html''' auf '''''jahr''/''alias''.html''' umgeschrieben werden. Also z.B. '''leser/items/mein_erster_blog_post.html''' zu '''2011/mein_erster_blog_post.html'''.&lt;br /&gt;
&lt;br /&gt;
Als erstes muss die generierte URL umgeschrieben werden:&lt;br /&gt;
&lt;br /&gt;
'''system/modules/customurls/CustomURLs.php'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  /**&lt;br /&gt;
   * @param array $arrRow&lt;br /&gt;
   * @param string $strParams&lt;br /&gt;
   * @param string $strUrl&lt;br /&gt;
   * @return string&lt;br /&gt;
   */&lt;br /&gt;
  public function hookGenerateFrontendUrl($arrRow, $strParams, $strUrl)&lt;br /&gt;
  {&lt;br /&gt;
    if (   $GLOBALS['objPage']-&amp;gt;id == 5 // Page ID 5 ist die Reader Page&lt;br /&gt;
        &amp;amp;&amp;amp; preg_match('#/items/([^/]+)#', $strParams, $arrMatch)) // extrahiere den Alias aus den Parametern&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;import('Database');&lt;br /&gt;
&lt;br /&gt;
      // Den News aus der DB laden um an das Datum zu kommen&lt;br /&gt;
      $objNews = $this-&amp;gt;Database&lt;br /&gt;
        -&amp;gt;prepare(&amp;quot;SELECT * FROM tl_news WHERE id=? OR alias=?&amp;quot;)&lt;br /&gt;
        -&amp;gt;execute($arrMatch[1], $arrMatch[1]);&lt;br /&gt;
      if ($objNews-&amp;gt;next())&lt;br /&gt;
      {&lt;br /&gt;
        // Die URL umschreiben&lt;br /&gt;
        $strUrl = str_replace('leser/items/', date('Y', $objNews-&amp;gt;date) . '/', $strUrl);&lt;br /&gt;
&lt;br /&gt;
        // Alternatives Format jahr/monat/alias.html&lt;br /&gt;
        // Verwende beim 2. mal parseDate, um lokalisierte Monatsnamen zu erhalten. (z.B. Mai anstatt May)&lt;br /&gt;
        // $strUrl = str_replace('leser/items/', date('Y', $objNews-&amp;gt;date) . '/' . $this-&amp;gt;parseDate('M', $objNews-&amp;gt;date) . '/', $strUrl);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return $strUrl;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt werden alle URLs die generiert werden umgeschrieben, aber Contao weiß zur Zeit noch nichts mit diesen anzufangen, deshalb müssen wir dieses URL Format selbst verarbeiten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''system/modules/customurls/CustomURLs.php'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  /**&lt;br /&gt;
   * @param array $arrFragments&lt;br /&gt;
   * @return array&lt;br /&gt;
   */&lt;br /&gt;
  public function hookGetPageIdFromUrl($arrFragments)&lt;br /&gt;
  {&lt;br /&gt;
    if (   $this-&amp;gt;Environment-&amp;gt;httpHost == 'blog.example.com'&lt;br /&gt;
        &amp;amp;&amp;amp; count($arrFragments) &amp;gt;= 1&lt;br /&gt;
        &amp;amp;&amp;amp; preg_match('#^\d\d\d\d/(.*)#', $arrFragments[0], $arrMatch) // Alias extrahieren; Format: Jahreszahl (4 Zahlen) gefolgt vom Alias&lt;br /&gt;
    //  &amp;amp;&amp;amp; preg_match('#^\d\d\d\d/\w\w\w/(.*)#', $arrFragments[0], $arrMatch) // Alias extrahieren; Alternatives Format: Jahreszahl (4 Zahlen) mit Monat (3 Buchstaben) gefolgt vom Alias&lt;br /&gt;
    )&lt;br /&gt;
    {&lt;br /&gt;
      // Splitte das Fragment in die 3 Contao Fragmente&lt;br /&gt;
      //   1. Page Alias/ID&lt;br /&gt;
      //   2. Parameter Identifier&lt;br /&gt;
      //   3. Item Alias/ID&lt;br /&gt;
      $arrTemp = array('leser', 'items', $arrMatch[1]);&lt;br /&gt;
      // ersetze das erste Fragment mit den neuen Fragmenten und hänge den Rest hinten dran&lt;br /&gt;
      return array_merge&lt;br /&gt;
      (&lt;br /&gt;
        $arrTemp,&lt;br /&gt;
        array_slice($arrFragments, 1)&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
    return $arrFragments;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fertig, jetzt werden die URLs entsprechend umgeschrieben.&lt;/div&gt;</summary>
		<author><name>Tril</name></author>	</entry>

	</feed>