https://de.contaowiki.org/index.php?title=Strukturierte_URLs&feed=atom&action=historyStrukturierte URLs - Versionsgeschichte2024-03-29T15:24:17ZVersionsgeschichte dieser Seite in Contao Community DocumentationMediaWiki 1.22.6https://de.contaowiki.org/index.php?title=Strukturierte_URLs&diff=4590&oldid=prevBugBuster: Kategorie2011-11-25T19:34:40Z<p>Kategorie</p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Nächstältere Version</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Version vom 25. November 2011, 19:34 Uhr</td>
</tr><tr><td colspan="2" class="diff-lineno">Zeile 1:</td>
<td colspan="2" class="diff-lineno">Zeile 1:</td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="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;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category:Admin_HOWTOS]]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="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;"><div>=Strukturierte URLs=</div></td><td class='diff-marker'> </td><td style="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;"><div>=Strukturierte URLs=</div></td></tr>
<tr><td class='diff-marker'> </td><td style="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;"></td><td class='diff-marker'> </td><td style="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;"></td></tr>
<!-- diff cache key kunde29sql1:diff:version:1.11a:oldid:4587:newid:4590 -->
</table>BugBusterhttps://de.contaowiki.org/index.php?title=Strukturierte_URLs&diff=4587&oldid=prevTril: Die Seite wurde neu angelegt: „=Strukturierte URLs= In diesem Artikel geht es darum, wie man aus den klassischen Contao URLs <code>/reader/items/alias.html</code> z.B. URLs dieser Form macht <…“2011-11-25T07:34:21Z<p>Die Seite wurde neu angelegt: „=Strukturierte URLs= In diesem Artikel geht es darum, wie man aus den klassischen Contao URLs <code>/reader/items/alias.html</code> z.B. URLs dieser Form macht <…“</p>
<p><b>Neue Seite</b></p><div>=Strukturierte URLs=<br />
<br />
In diesem Artikel geht es darum, wie man aus den klassischen Contao URLs <code>/reader/items/alias.html</code> z.B. URLs dieser Form macht <code>/reader/2011/Feb/alias.html</code>.<br />
Dies lässt sich sowohl für News, Events und andere Reader basierte Extensions machen.<br />
<br />
Zunächst gehe ich davon aus, dass die '''Reader Page ID 5''' und dem '''Alias leser''' ist.<br />
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).<br />
<br />
Zuerst muss eine kleine Erweiterung erstellt werden:<br />
<br />
'''system/modules/customurls/config/config.php'''<br />
<source lang="php"><br />
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');<br />
<br />
/**<br />
* Hooks<br />
*/<br />
$GLOBALS['TL_HOOKS']['generateFrontendUrl'][] = array('CustomURLs', 'hookGenerateFrontendUrl');<br />
$GLOBALS['TL_HOOKS']['getPageIdFromUrl'][] = array('CustomURLs', 'hookGetPageIdFromUrl');<br />
</source><br />
<br />
'''system/modules/customurls/CustomURLs.php'''<br />
<source lang="php"><br />
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');<br />
<br />
class CustomURLs extends Frontend<br />
{<br />
/**<br />
* @var Database;<br />
*/<br />
protected $Database;<br />
<br />
/**<br />
* @param array $arrRow<br />
* @param string $strParams<br />
* @param string $strUrl<br />
* @return string<br />
*/<br />
public function hookGenerateFrontendUrl($arrRow, $strParams, $strUrl)<br />
{<br />
...<br />
}<br />
<br />
/**<br />
* @param array $arrFragments<br />
* @return array<br />
*/<br />
public function hookGetPageIdFromUrl($arrFragments)<br />
{<br />
...<br />
}<br />
}<br />
</source><br />
<br />
Bisher haben wir eine Klasse CustomURLs erstellt, welche auf die beiden HOOKs '''generateFrontendUrl''' und '''getPageIdFromUrl''' registriert ist.<br />
Mit '''generateFrontendUrl''' werden wir die URL umschreiben, während '''getPageIdFromUrl''' die URL zurück transformieren wird.<br />
<br />
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'''.<br />
<br />
Als erstes muss die generierte URL umgeschrieben werden:<br />
<br />
'''system/modules/customurls/CustomURLs.php'''<br />
<source lang="php"><br />
...<br />
/**<br />
* @param array $arrRow<br />
* @param string $strParams<br />
* @param string $strUrl<br />
* @return string<br />
*/<br />
public function hookGenerateFrontendUrl($arrRow, $strParams, $strUrl)<br />
{<br />
if ( $GLOBALS['objPage']->id == 5 // Page ID 5 ist die Reader Page<br />
&& preg_match('#/items/([^/]+)#', $strParams, $arrMatch)) // extrahiere den Alias aus den Parametern<br />
{<br />
$this->import('Database');<br />
<br />
// Den News aus der DB laden um an das Datum zu kommen<br />
$objNews = $this->Database<br />
->prepare("SELECT * FROM tl_news WHERE id=? OR alias=?")<br />
->execute($arrMatch[1], $arrMatch[1]);<br />
if ($objNews->next())<br />
{<br />
// Die URL umschreiben<br />
$strUrl = str_replace('leser/items/', date('Y', $objNews->date) . '/', $strUrl);<br />
<br />
// Alternatives Format jahr/monat/alias.html<br />
// Verwende beim 2. mal parseDate, um lokalisierte Monatsnamen zu erhalten. (z.B. Mai anstatt May)<br />
// $strUrl = str_replace('leser/items/', date('Y', $objNews->date) . '/' . $this->parseDate('M', $objNews->date) . '/', $strUrl);<br />
}<br />
}<br />
<br />
return $strUrl;<br />
}<br />
...<br />
</source><br />
<br />
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.<br />
<br />
<br />
'''system/modules/customurls/CustomURLs.php'''<br />
<source lang="php"><br />
...<br />
/**<br />
* @param array $arrFragments<br />
* @return array<br />
*/<br />
public function hookGetPageIdFromUrl($arrFragments)<br />
{<br />
if ( $this->Environment->httpHost == 'blog.example.com'<br />
&& count($arrFragments) >= 1<br />
&& preg_match('#^\d\d\d\d/(.*)#', $arrFragments[0], $arrMatch) // Alias extrahieren; Format: Jahreszahl (4 Zahlen) gefolgt vom Alias<br />
// && 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<br />
)<br />
{<br />
// Splitte das Fragment in die 3 Contao Fragmente<br />
// 1. Page Alias/ID<br />
// 2. Parameter Identifier<br />
// 3. Item Alias/ID<br />
$arrTemp = array('leser', 'items', $arrMatch[1]);<br />
// ersetze das erste Fragment mit den neuen Fragmenten und hänge den Rest hinten dran<br />
return array_merge<br />
(<br />
$arrTemp,<br />
array_slice($arrFragments, 1)<br />
);<br />
}<br />
return $arrFragments;<br />
}<br />
...<br />
</source><br />
<br />
Fertig, jetzt werden die URLs entsprechend umgeschrieben.</div>Tril