Home / Forum / xrowmetadata vs. multisite

xrowmetadata vs. multisite

Um Zugang zu den Foren zu erhalten, müssen Sie angemeldet sein

Autor Nachricht

Marcus Meirose

Registriert seit: 07.08.2007

Beiträge: 15

Dienstag, 10. August 2010 16:56:24

Hallo zusammen,

ich versuche gerade mir die XML-Sitemap per Cronjob zu erzeugen. Der Cronjob stammt aus dem xrow metadata Projekt -> http://projects.ez.no/xrowmetadata.

Außerdem behinhaltet die einzelne ezPublish-Instanz mehrere unterschiedliche Seiten, quasi die Geschichte hier -> http://share.ez.no/forums/setup-d...isite_installation/%28from%29/ez.no/

Im Detail schaut die INI-Verteilung so aus:
extension/site_xyz/settings/override/site.ini.append.php -> globale Settings für die Seite
extension/site_xyz/settings/xyz_user_de/site.ini.append.php -> Settings für deutsch
extension/site_xyz/settings/xyz_user_en/site.ini.append.php -> Settings für englisch
usw.

Folgende Zeile aus dem Cronjob bereitet mir nun etwas Kopfzerbrechen:

$specificINI = eZINI::instance( 'site.ini.append.php', 'settings/siteaccess/' . $siteAccess, true, false, false, true );


Leider greift hier die Seitenspezifische site.ini nicht, d.h. die anschließende Zeile

if ( $specificINI->hasVariable( 'RegionalSettings', 'ContentObjectLocale' ) )


liefert immer false, da sich dieses Setting ja in der Seitenspezifischen site.ini befindet.

Eine Lösung welche funktioniert, wäre den Extensionnamen in der Konfigurations-INI des Cronjobs anzugeben und diesen Namen in den Pfad einzubauen. Ist m.E. allerdings "gepfriemel".

Ist ein ziemlich spezieller Fall, aber vielleicht stand jemand schon mal vor dem gleichen Problem?

Grüße
Marcus


Marcus Meirose

Registriert seit: 07.08.2007

Beiträge: 15

Mittwoch, 11. August 2010 10:52:27

Hallo,

also nun habe ich es hinbekommen.

Damit die richtige INI geladen wird benötige ich den Extensionname des entsprechenden Siteaccess.

Leicht abgeändert liefert die Funktion isExtensionSiteaccess aus der Datei runcronjobs.php den Extensionname zurück.

function getExtensionSiteaccess( $siteaccessName )
{
    $ini = eZINI::instance();
    $extensionDirectory = $ini->variable( 'ExtensionSettings', 'ExtensionDirectory' );
    $activeExtensions = $ini->variable( 'ExtensionSettings', 'ActiveExtensions' );

    foreach ( $activeExtensions as $extensionName )
    {
        $possibleExtensionPath = $extensionDirectory . '/' . $extensionName . '/settings/siteaccess/' . $siteaccessName;
        if ( file_exists( $possibleExtensionPath ) )
            return $extensionName;
    }
    return false;
}


Am Anfang der äußeren foreach findet nun die Überprüfung statt ob der Siteaccess ein Extensionsiteaccess ist und anschließend wird die entsprechende ini geladen.
foreach ( $siteAccessArray as $siteAccess )
{
    $extensionName = getExtensionSiteaccess( $siteAccess );

    if ( $extensionName !== false )
    {
    	$extensionDirectory = $ini->variable( 'ExtensionSettings', 'ExtensionDirectory' );
    	$specificINI = eZINI::instance( 'site.ini.append.php', $extensionDirectory . '/' . $extensionName . '/settings/siteaccess/' . $siteAccess , true, false, false, true );
    }
    else
    {
    	$specificINI = eZINI::instance( 'site.ini.append.php', 'settings/siteaccess/' . $siteAccess, true, false, false, true );    	
    }
...


Eine Kleinigkeit ist mir dabei noch aufgefallen. Und zwar wurde für jeden Siteaccess die gleiche locale für den url_alias verwendet. Das liegt daran, dass in der fetch Funktion die prioritized language wieder zurück gesetzt wird für den Fall das eine language übergeben wird. Hier noch der entsprechende Text dazu:

Clears the prioritized language list set by eZContentLanguage::setPrioritizedLanguages and reloading the list from INI settings.

Dies scheint bei der veränderten INI-Struktur ebenfalls nicht zu funktionieren. Deshalb musste ich mit folgender Zeile

eZContentLanguage::setPrioritizedLanguages( array( $language["locale"] ) );


direkt nach

$nodeArray = $rootNode->subTree( $params );


wieder die entsprechende Sprache setzen.

Grüße
Marcus

Um Zugang zu den Foren zu erhalten, müssen Sie angemeldet sein