Übersetzung des Cookie-Einschränkungsmodus

7

Mit neuester Version 1.8.1 CE cookie_restriction_notice_blockging an before_body_endin - Layout (/app/design/frontend/base/default/layout/page.xml). Die Benutzer wissen jedoch nichts über diesen Hinweis und es wird auch nicht erwartet, dass sie Cookies zulassen.

Ich habe diesen Code einfach ungesetzt global_cookie_notice blockaus before_body_endund legen Sie sie in after_body_startin der Layout - Datei local.xmlin meinem Thema:

    <reference name="before_body_end">
        <action method="unsetChild"><name>global_cookie_notice</name></action>    
    </reference>

    <reference name="after_body_start">
        <block type="page/html_cookieNotice" name="global_cookie_notice" as ="global_cookie_notice" template="page/html/cookienotice.phtml" before="-" />
    </reference>`

Ich kann jedoch nicht herausfinden, wie für verschiedene Geschäftsansichten übersetzt werden soll. Das Ändern des Texts wie gewohnt im CMS-Block in admin ( cookie_restriction_notice_block) für verschiedene Geschäftsansichten hat bei mir nicht funktioniert.

Wie kann ich cookie_restriction_notice_blockfür verschiedene Geschäftsansichten übersetzen ?

Marc
quelle
Wo befindet sich der Text? Ist es in cookienotice.phtml oder einem statischen Block?
Sander Mangel
Text befindet sich in einem statischen Block. Ich habe wie gewohnt verschiedene Versionen pro Geschäftsansicht erstellt, aber der Text wird nicht übersetzt (die Schaltfläche ALLOW wird über CSV übersetzt). Ich sehe, dass COOKIE_RESTRICTION_NOTICE_CMS_BLOCK_IDENTIFIER in cookie.php festgelegt ist, kann aber nicht herausfinden, wie es funktioniert
Marc

Antworten:

11

in app / code / core / Mage / Page / Block / Html / CookieNotice.php:

$block = Mage::getModel('cms/block')->load($blockIdentifier, 'identifier');

Vor dem Laden des Blocks sollten Sie die Store ID festlegen:

$block = Mage::getModel('cms/block')->setStoreId(Mage::app()->getStore()->getId())->load($blockIdentifier, 'identifier');

Sie können Ihre lokale App / code / local / Mage / Page / Block / Html / CookieNotice.php verwenden

Marc
quelle
2

Dieser Block wird vom CMS-Modul im Standardspeicherbereich installiert in app/code/core/Mage/Cms/data/cms_setup/data-upgrade-1.6.0.0.1-1.6.0.0.2.php:

$content = "<p>This website requires cookies to provide all of its features. For more " .
    "information on what data is contained in the cookies, please see our " .
    "<a href=\"{{store direct_url=\"privacy-policy-cookie-restriction-mode\"}}\">Privacy Policy page</a>. " .
    "To accept cookies from this site, please click the Allow button below.</p>";

$cmsBlock = array(
    'title'         => 'Cookie restriction notice',
    'identifier'    => 'cookie_restriction_notice_block',
    'content'       => $content,
    'is_active'     => 1,
    'stores'        => 0
);

Mage::getModel('cms/block')->setData($cmsBlock)->save();

Die übersetzten Versionen, die Sie im Administrator erstellen möchten , funktionieren, solange sie auf den entsprechenden Speicherbereich beschränkt sind.

NB: Die Parameter des Datenladens können in debuggt werden Mage_Cms_Model_Resource_Block::_getLoadSelect().

Benmarks
quelle
Ich habe gerade in einer sauberen CE 1.8.1-Installation versucht, den Cookie-Einschränkungsmodus zu aktivieren, eine Geschäftsansicht hinzugefügt, den statischen Block mit derselben Kennung übersetzt und eine neue Geschäftsansicht zugewiesen. Dann wird im Frontend die Ansicht gewechselt und der Text wird nicht übersetzt.
Marc
Haben Sie den Originalblock dem englischen Geschäft zugewiesen?
Benmarks
In dieser Neuinstallation habe ich Hauptwebsite / Hauptwebsite-Speicher / und zwei Speicheransichten für Hauptwebsite-Speicher, Standardspeicheransicht und Castellano (neue Speicheransicht erstellt). In statischen Blöcken habe ich den Standard - (Titel) Cookie-Einschränkungshinweis, (ID) cookie_restriction_notice, (Store View) Default - und die neu erstellten - (Title) Nota Cookies, (ID) cookie_restriction_notice, (Store View) Castellano. Beide sind aktiviert, und das Wechseln der Store-Ansicht im Frontend hilft nicht. Ich hatte nie Probleme beim Übersetzen statischer Blöcke, auch ältere Versionen funktionierten einwandfrei, wenn ich mich nicht irre.
Marc
Es ist noch etwas anderes im Gange, da die CMS-Blöcke basierend auf dem Speicherbereich explizit geladen werden. Können Sie in der cms_block_storeTabelle nach dem store_idWert der englischen Version suchen?
Benmarks
vielen Dank für Ihre Zeit. In dieser Neuinstallation ist block_id jetzt 2 für die englische Version und 3 für die spanische Version in cms_block_table. Wenn ich mit der Tabelle cms_block_store kreuze, wird block_id 2 (EN) in store_id 1 und block_id 3 (ES) in store_id 2 angezeigt.
Marc
0

Es ist noch etwas anderes im Gange, da die CMS-Blöcke basierend auf dem Speicherbereich explizit geladen werden. Können Sie in der cms_block_storeTabelle nach dem store_idWert der englischen Version suchen? - Benmarks ♦ 19. Februar 14 um 13:12 Uhr

Nein, CMS-Blöcke werden nicht explizit in den Speicherbereich geladen. Die load()Methode endet mit einem fetchRow($select)Aufruf, der nur die erste Zeile zurückgibt (siehe Mage_Core_Model_Resource_Db_Abstract::load()). In diesem Fall wurde der Block aus dem Installationsskript hinzugefügt.

Die Mage_Cms_Model_Resource_Block::_getLoadSelect()Methode benötigt eine Geschäfts-ID, um die cms_block_storeTabelle zu verbinden . Ohne Speicher - ID - Einstellung $object->getStoreId()ist NULL...

/**
 * Retrieve select object for load object data
 *
 * @param string $field
 * @param mixed $value
 * @param Mage_Cms_Model_Block $object
 * @return Zend_Db_Select
 */
protected function _getLoadSelect($field, $value, $object)
{
    $select = parent::_getLoadSelect($field, $value, $object);

    if ($object->getStoreId()) {
        $stores = array(
            (int) $object->getStoreId(),
            Mage_Core_Model_App::ADMIN_STORE_ID,
        );

        $select->join(
            array('cbs' => $this->getTable('cms/block_store')),
            $this->getMainTable().'.block_id = cbs.block_id',
            array('store_id')
        )->where('is_active = ?', 1)
        ->where('cbs.store_id in (?) ', $stores)
        ->order('store_id DESC')
        ->limit(1);
    }

    return $select;
}

... ein Fehler, der immer noch besteht :( Denken Sie, https://magento.stackexchange.com/a/18380/46249 ist korrekt ...

sv3n
quelle