prestashop カタログを作成していますが、ログインしている顧客のみに表示する必要があります。これは可能ですか?これに組み込みの prestashop ログインを使用するとよいでしょう。
4 に答える
Prestashop 1.5 ソリューション:
元のファイルをアップロードするだけです。
classes\controller\FrontController.php
の中へ:
override/classes/controller/FrontController.php
次に、クラスの名前を変更します。最終的なコードは次のようになります。
class FrontController extends FrontControllerCore
{
public function init()
{
parent::init();
if (!$this->context->customer->isLogged() && $this->php_self != 'authentication' && $this->php_self != 'password')
{
Tools::redirect('index.php?controller=authentication?back=my-account');
}
}
}
最後のステップは、prestashop がオーバーライドされたクラスを認識できるように、次のファイルを手動で削除することです (自動的に再生成されます)。
cache/class_index.php
そしてほら、コアファイルを上書きせずに機能が達成されました。
提案があります。PrestaShop 1.5 の顧客グループ機能を使用して、ログインした顧客のみが価格を表示できるようにすることができます。訪問者にグループ化された顧客ごとに、Web サイトがカタログ モードで表示されます。
これが私の解決策です。それは魅力のように機能し、非常に簡単に修正できます!
classes\Configuration.php (114 行目あたり) では、次のようになります。
static public function get($key, $id_lang = NULL)
{
if ($id_lang AND isset(self::$_CONF_LANG[(int)$id_lang][$key]))
return self::$_CONF_LANG[(int)$id_lang][$key];
elseif (is_array(self::$_CONF) AND key_exists($key, self::$_CONF))
return self::$_CONF[$key];
return false;
}
これを次のように変更します。
static public function get($key, $id_lang = NULL)
{
//Grab access to the $cookie which is already loaded in the FrontController as global $cookie;
global $cookie;
if ($id_lang AND isset(self::$_CONF_LANG[(int)$id_lang][$key]))
return self::$_CONF_LANG[(int)$id_lang][$key];
elseif (is_array(self::$_CONF) AND key_exists($key, self::$_CONF))
//If the system is trying to find out if Catalog Mode is ON, then return the configuration setting,
//but override it with the user logon status
if($key == 'PS_CATALOG_MODE')
{
return !$cookie->logged || self::$_CONF[$key];
}
else
{
return self::$_CONF[$key];
}
return false;
}
基本的に、ユーザーがログインしていないときは強制的に「カタログ モード」を表示し、ログインしているときはこれをオフにしたいと考えていました。
これが v1.4.3.0 で機能することを保証できます。現在のバージョン 1.4.8.2 (この記事の時点) のコードは変更されていないため、そこで機能するはずです。
簡単です。
次のコードを使用します。
if(!self::$cookie->isLogged(true) AND in_array($this->step, array(1, 2, 3)))
Tools::redirect('authentication.php');
indexController の前処理で