Cookie制限モードの変換


7

最新リリースでは、CE 1.8.1 cookie_restriction_notice_blockbefore_body_endレイアウト(/app/design/frontend/base/default/layout/page.xml)に含まれています。しかし、ユーザーはその通知についても、Cookieを許可することが期待されていることについても理解していません。

私はこのコードを使用して、テーマのレイアウトファイルで簡単に設定を解除global_cookie_notice blockbefore_body_endて設定しましafter_body_startlocal.xml

    <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>`

しかし、さまざまなストアビューに合わせて翻訳する方法がわかりません。cookie_restriction_notice_blockさまざまなストアビューの管理()のCMSブロックで通常どおりテキストを変更しても、うまくいきませんでした。

cookie_restriction_notice_blockさまざまなストアビューに翻訳するにはどうすればよいですか?


テキストはどこにありますか。それはcookienotice.phtmlまたは静的ブロックにありますか?
サンダーマンゲル

テキストは静的ブロック内にあります。通常どおり、ストアビューごとに異なるバージョンを作成しましたが、テキストは翻訳されていません([許可]ボタンは.csvで翻訳されています)。COOKIE_RESTRICTION_NOTICE_CMS_BLOCK_IDENTIFIERがcookie.phpに設定されているのがわかりますが、それを機能させる方法がわかりません
Marc

回答:


11

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

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

ブロックをロードする前に、ストアIDを設定する必要があります。

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

ローカルのapp / code / local / Mage / Page / Block / Html / CookieNotice.phpを使用できます


2

このブロックは、CMSモジュールによって次のデフォルトのストアスコープにインストールされます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();

あなたが管理者で作成しようとしている翻訳版はなりそれらが適切なストア範囲に限定されている限り動作します。

注意:データロードのパラメータはでデバッグできますMage_Cms_Model_Resource_Block::_getLoadSelect()


クリーンなCE 1.8.1インストール、Cookie制限モードをオンにして、ストアビューを追加し、同じブロックで静的ブロックを変換して、新しいストアビューを割り当てました。次に、フロントエンドでビューを切り替え、テキストを翻訳しません。
Marc

元のブロックを英語ストアに割り当てましたか?
ベンマークス2014

このクリーンインストールでは、Main Website / Main Website Store /と、Main Website Storeの2つのストアビュー、Default Store ViewとCastellano(新しいストアビューが作成されます)があります。静的ブロックでは、デフォルト-(タイトル)Cookie制限通知、(ID)cookie_restriction_notice、(ストアビュー)デフォルト-および新しく作成された-(タイトル)Nota Cookie、(ID)cookie_restriction_notice、(ストアビュー)Castellanoがあります。どちらも有効になっており、フロントエンドでストアビューを切り替えることはできません。静的ブロックの変換で問題が発生することはありませんでした。以前のバージョンでも、間違いがなければ正常に機能しました。
Marc

CMSブロックはストアスコープに基づいて明示的にロードされるため、何か他のことが起こっています。cms_block_store表でstore_id英語版の値を確認できますか?
ベンマークス2014

御時間ありがとうございます。この新鮮で今すぐインストール、BLOCK_IDはcms_block_tableとcms_block_storeテーブルと交差して英語版とスペイン語版のための3のために2である、I GET BLOCK_ID 2(EN)STORE_ID 1に示したとSTORE_ID 2に示す3(ES)をBLOCK_ID
マルク・

0

CMSブロックはストアスコープに基づいて明示的にロードされるため、何か他のことが起こっています。cms_block_store表でstore_id英語版の値を確認できますか?–ベンマークス♦2014年2月19日13:12

いいえ、CMSのブロックがされていない店舗の範囲に明示的にロードされました。load()メソッドが終了するfetchRow($select)だけ返し呼び出し、最初の行(参照Mage_Core_Model_Resource_Db_Abstract::load())。この場合、ブロックはインストールスクリプトから追加されます。

このMage_Cms_Model_Resource_Block::_getLoadSelect()メソッドは、cms_block_storeテーブルを結合するためにストアIDセットを必要とします。ストアIDを設定しない$object->getStoreId()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;
}

...まだ存在するバグhttps://magento.stackexchange.com/a/18380/46249が正しいと思う...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.