Добрый день! Использую виш-лист на сайте, переделав OC под каталог. Всё отлично, но по умоллчанию система не показывает виш-лист незарегистрированным пользователям. Для решения есть несколько плагинов, но все они платные (под версию старше 2.1) Посмотрел код плагинов под 2.0 и 1.5. Там пара строчек кода! Но в 2.1 что то поменяли, и с ним он уже не работает. Подскажите, что изменить, где? Что именно и куда перенесли в 2.1? Код: <file path="catalog/controller/account/wishlist.php"> <operation> <search trim="true" index="0"><![CDATA[ if (!$this->customer->isLogged()) { ]]></search> <add position="replace" trim="false" offset="4"><![CDATA[ /* Guest Wishlist */ ]]></add> </operation> <operation> <search trim="true" index="0"><![CDATA[ if ($this->customer->isLogged()) { ]]></search> <add position="replace" trim="false" offset="0"><![CDATA[ if (true) { ]]></add> </operation> </file> либо VQmod Код: <id>Wishlist without login</id> <version>1.5.5.x</version> <vqmver required="true">2.4.0</vqmver> <author>[email protected]</author> <file name="catalog/controller/account/wishlist.php"> <operation error="skip"> <search position="replace" offset="5"><![CDATA[if (!$this->customer->isLogged()) {]]></search> <add><![CDATA[ // start: OCdevWizard Wishlist without login //if (!$this->customer->isLogged()) { $this->session->data['redirect'] = $this->url->link('account/wishlist', '', 'SSL'); //$this->redirect($this->url->link('account/login', '', 'SSL')); //} // end: OCdevWizard Wishlist without login ]]></add> </operation> </file> <file name="catalog/controller/account/wishlist.php"> <operation error="skip"> <search position="replace" offset="6"><![CDATA[if ($this->customer->isLogged()) {]]></search> <add><![CDATA[ // start: OCdevWizard Wishlist without login //if ($this->customer->isLogged()) { $json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'], $this->url->link('account/wishlist')); //} else { //$json['success'] = sprintf($this->language->get('text_login'), $this->url->link('account/login', '', 'SSL'), $this->url->link('account/register', '', 'SSL'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'], $this->url->link('account/wishlist')); //} // end: OCdevWizard Wishlist without login ]]></add> </operation> </file>
пардон, оказывается под 2.0.3 идет, вы правы) пробовали руками вставить код без окмода? ошибок нет? PS: я еще не пробовал, но вопрос также актуален по данному решению
Нашел в changelog что-то касательно wishlista https://github.com/opencart/opencart/commit/0761b30bcd20513412c26eeccbab58867516541e Но не уверен, что это именно то.
Пробовал просто снять if для функции - в начале catalog/controller/account/wishlist.php - никакого результата
Суть в том, что вишлисты привязаны к зарегистрированным покупателям и без наличия аккаунта вишлист абсолютно не к чему привязывать. Так что мало просто убрать проверку на логин (и если те модули были рабочие, там явно было что-то ещё). Нужно либо для незарегистрированных хранить вишлист в куки (а ещё лучше - в localStorage), либо хранить в базе, а в куки проставлять какой-то индентификатор, по которому можно будет опознать посетителя и найти его вишлист в базе. Вообще, в свете того, что куки могут переодически чиститься, лучше всего в любом варианте использовать localStorage, ибо иначе после очистки куки пользователь потеряет свой вишлист без какой-либо возможности его восстановить.
Dotrox, Спасибо Вам за пояснения. Как я понял, система и так хранит данные в кукисах, даже до регистрации. Выбираем товар => Он запоминается, но нам не дают его просмотреть до регистрации.
У ОК с куки вообще проблема в том плане, что он их практически не использует. Например, даже для зарегистрированных покупателей после входа туда не проставляется никаких меток и логин сбрасывается сразу же после истечения жизни сессии. И именно в сессии и хранятся товары, которые добавлены в вишлист до входа/регистрации.
Если верить коду модуля для 2.0, то было Код: <search trim="true" index="0"><![CDATA[ if (!$this->customer->isLogged()) { ]]></search> <add position="replace" trim="false" offset="4"><![CDATA[ /* Guest Wishlist */ ]]></add> </operation> <operation> <search trim="true" index="0"><![CDATA[ if ($this->customer->isLogged()) { ]]></search> <add position="replace" trim="false" offset="0"><![CDATA[ if (true) { ]]></add> А по делу - пойду таки покупать модуль.
Эта модификация делала только одну вещь: позволяла увидеть содержимое вишлиста в сессии для незарегистрированных, что абсолютно бессмысленно, ибо вишлист терялся через 24 минуты бездеятельности (стандартное время жизни сессии в php). Так что этот модуль был пустышкой. В 2.1 изменили только то, что вишлист перестал вообще писаться в сессию, а начал сразу писаться в БД. Кстати, маленький нюанс: в 2.0 вишлист вообще в БД не писался, то есть, он терялся даже для зарегистрированных.