Hallo Andreas und andere,
ist bzgl. der fehlerhaften Artikel-Aliase schon etwas passiert? Wenn nein, dann hätte ich folgenden Vorschlag anzubieten:
Die Funktion "generateArticle" in der Klasse "tl_page" könnte folgendermaßen überschrieben werden:
In der vorvorletzten Zeile der Funktion könnte man
Code:
$arrSet['alias'] = $dc->activeRecord->alias;
durch folgenden ersetzen:
Code:
if( $arAlias = explode('/',$dc->activeRecord->alias) )
$arrSet['alias'] = end($arAlias);
else
$arrSet['alias'] = $dc->activeRecord->alias;
Ich habe dazu in system/modules/myChanges/dca/ die Datei tl_page.php angelegt, die folgende Klasse enthält:
Code:
class my_tl_page extends tl_page
{
public function generateArticle(DataContainer $dc)
{
// Return if there is no active record (override all)
if (!$dc->activeRecord)
{
return;
}
// Existing or not a regular page
if ($dc->activeRecord->tstamp > 0 || !in_array($dc->activeRecord->type, array('regular', 'error_403', 'error_404')))
{
return;
}
$new_records = $this->Session->get('new_records');
// Not a new page
if (!$new_records || (is_array($new_records[$dc->table]) && !in_array($dc->id, $new_records[$dc->table])))
{
return;
}
// Check whether there are articles (e.g. on copied pages)
$objTotal = $this->Database->prepare("SELECT COUNT(*) AS total FROM tl_article WHERE pid=?")
->execute($dc->id);
if ($objTotal->total > 0)
{
return;
}
// Create article
$arrSet['pid'] = $dc->id;
$arrSet['sorting'] = 128;
$arrSet['tstamp'] = time();
$arrSet['author'] = $this->User->id;
$arrSet['inColumn'] = 'main';
$arrSet['title'] = $dc->activeRecord->title;
if( $arAlias = explode('/',$dc->activeRecord->alias) )
$arrSet['alias'] = end($arAlias);
else
$arrSet['alias'] = $dc->activeRecord->alias;
$arrSet['published'] = $dc->activeRecord->published;
$this->Database->prepare("INSERT INTO tl_article %s")->set($arrSet)->execute();
}
}
Nun müsste die Klasse "my_tl_page" noch statt der Klasse "tl_page" registriert werden. Leider bin ich php-mäßig nicht der König und auch Contao-mäßig immernoch Anfänger. Hat jemand einen Tipp wie ich es schaffe, dass meine Funktion statt der in der ursprünglichen Klasse ausgeführt wird? Und vielleicht kann mir auch noch jemand sagen, ob das generell ein gangbarer Weg zur Problemlösung ist.
Danke im Voraus,
juju
Lesezeichen