Вопросы по разработке и модификации CS-Cart

$cart['user_data']['b_country'] - я так понял это в данные сессии $_SESSION['cart']['user_data'] доступные на всех страницах, а как добраться до $_user_data['b_country'] это тоже должны быть данные сесии.

$_user_data не имеет никакого прямого отношения к сессии. Это временное хранилище тех данных, которые гость вводил, но не закончил, или закончил (не суть). Данные из этого массива передаются в шаблон и отображаются во втором шаге. Как только гость переходит на следующий шаг, данные из второго шага попадают в $cart['user_data'] и доступны также в $_SESSION['cart']['user_data'], куда же без них.

Данные из этого массива передаются в шаблон и отображаются во втором шаге

Так мне и надо название города отобразить на втором шаге :-) а как его (название города) туда засунуть? Вот это вопрос.

Так мне и надо название города отобразить на втором шаге :-) а как его (название города) туда засунуть? Вот это вопрос.


Вам надо создать checkout.pre.php контроллер с кодом:

if (!empty($_SESSION['saved_post_data']) && !empty($_SESSION['saved_post_data']['user_data'])) {
    $_SESSION['saved_post_data']['user_data']['b_city'] = 'ВАШ ГОРОД'; 
} else {
   $_SESSION['saved_post_data'] = array(
       'user_data' => array(
           'b_city' => 'ВАШ ГОРОД',
           's_city' => 'ВАШ ГОРОД'
       )
   );
}

При вызове fn_restore_post_data вы получите нужное значение в $_user_data

} else {
    $_SESSION['saved_post_data'] = array(
        'user_data' => array(
            'b_city' => 'ВАШ ГОРОД',
             's_city' => 'ВАШ ГОРОД'
        )
    );
}

Этот кусок может много чего наломать

} else {
    $_SESSION['saved_post_data'] = array(
        'user_data' => array(
            'b_city' => 'ВАШ ГОРОД',
             's_city' => 'ВАШ ГОРОД'
        )
    );
}

Этот кусок может много чего наломать

Например? Восстановление идет по ключу. Т.е. сразу отметаем, что в других контроллерах ничего не сломается. А при апдейте профиля в это условие зайдет, только при первом обновлении профиля незарегистрированного пользователя

Подскажите, как можно сделать следующий функционал: на сайте отображается форма с одни полем для ввода email, посетитель вводит в форму email и после этого на указанную почту отправляется сообщение со списком товаров из блока Вы смотрели, сообщение имеет свой шаблон(может периодически меняться)?

Подскажите, как можно сделать следующий функционал: на сайте отображается форма с одни полем для ввода email, посетитель вводит в форму email и после этого на указанную почту отправляется сообщение со списком товаров из блока Вы смотрели, сообщение имеет свой шаблон(может периодически меняться)?

К сожалению, в стандарте подобного функционала нет. Ваши пользователи только могут подписывать на рассылки, содержимое которых вы уже сами формируете.

Поэтому только писать новый модуль.

Хорошо, шаблон для рассылки я могу потом создать и потом отправить письмо. Мне надо сохранить содержимое формы в БД, при этом одно из полей формы формы надо сделать скрытым(как? в нем будут храниться список идишников товаров). А это можно сделать?

Вам надо создать checkout.pre.php контроллер с кодом:

Спасибо! попробую.

if (!empty($_SESSION['saved_post_data']) && !empty($_SESSION['saved_post_data']['user_data'])) {
    $_SESSION['saved_post_data']['user_data']['b_city'] = 'ВАШ ГОРОД'; 
} else {
   $_SESSION['saved_post_data'] = array(
       'user_data' => array(
           'b_city' => 'ВАШ ГОРОД',
           's_city' => 'ВАШ ГОРОД'
       )
   );
}

На сколько я понял $_user_data не связана с сессией и передать туда данные можно только через precontroller.

А зачем это временное хранилище, если эти данные можно хранить в сессии, есть же готовый массив $_SESSION['cart']['user_data']

Спасибо! попробую.

if (!empty($_SESSION['saved_post_data']) && !empty($_SESSION['saved_post_data']['user_data'])) {
    $_SESSION['saved_post_data']['user_data']['b_city'] = 'ВАШ ГОРОД'; 
} else {
   $_SESSION['saved_post_data'] = array(
       'user_data' => array(
           'b_city' => 'ВАШ ГОРОД',
           's_city' => 'ВАШ ГОРОД'
       )
   );
}

На сколько я понял $_user_data не связана с сессией и передать туда данные можно только через precontroller.

А зачем это временное хранилище, если эти данные можно хранить в сессии, есть же готовый массив $_SESSION['cart']['user_data']

$_SESSION['cart']['user_data'] - это данные чисто по корзине

$_SESSION['saved_post_data']['user_data'], откуда попадает значение в $_user_data используется не только на корзине, но и при работе с профилями

Например, вы заполнили форму профиля при оформлении заказа, а оказывается, что аккаунт с таким e-mail уже существует. Введенные данные в $_SESSION['cart'] писать не нужно, но в тоже время отобразить их для пользователя нужно, чтобы он мог подправить данные

Хорошо, шаблон для рассылки я могу потом создать и потом отправить письмо. Мне надо сохранить содержимое формы в БД, при этом одно из полей формы формы надо сделать скрытым(как? в нем будут храниться список идишников товаров). А это можно сделать?

Если мы говорим про встроенный блок для подписки на обновления, то нужно добавить в файл

design/themes/responsive/templates/addons/newsletters/blocks/static_templates/subscribe.tpl

скрытое поле

{if $smarty.session.recently_viewed_products}

{/if}

а так же добавить соответствующее поле (product_ids) в таблицу cscart_subscribers

$_SESSION['cart']['user_data'] - это данные чисто по корзине

$_SESSION['saved_post_data']['user_data'], откуда попадает значение в $_user_data используется не только на корзине, но и при работе с профилями

Например, вы заполнили форму профиля при оформлении заказа, а оказывается, что аккаунт с таким e-mail уже существует. Введенные данные в $_SESSION['cart'] писать не нужно, но в тоже время отобразить их для пользователя нужно, чтобы он мог подправить данные

Вроде в голове начинает прояснятся :-)

Я тут подумал, что информацию о городе лучше хранить в массиве $_SESSION['customer_loc'] там наверняка уже есть страна. Только он какой-то неуловимый, то он есть, то его сразу нет :grin:. Это включено 'disable_localizations' => false.

Вроде в голове начинает прояснятся :-)

Я тут подумал, что информацию о городе лучше хранить в массиве $_SESSION['customer_loc'] там наверняка уже есть страна. Только он какой-то неуловимый, то он есть, то его сразу нет :grin:. Это включено 'disable_localizations' => false.

Судя по коду, $_SESSION['customer_loc'] используется для расчета стоимости доставки и обнуляется после первого использования

Заведите свой индекс в $_SESSION. Например $_SESSION['selected_city']. И к нему обращайтесь, в него записывайте. Это будет только ваше значение

Заведите свой индекс в $_SESSION. Например $_SESSION['selected_city']. И к нему обращайтесь, в него записывайте. Это будет только ваше значение

Это конечно можно, я предполагал, что есть некий массив данный как-то связанный с местоположением пользователя хотя бы на уровне страны.

В $_SESSION['customer_loc'] хранится информация о текущей локализации, она не имеет прямого отношения к $_SESSION['cart']['user_data']

Кроме того, $_SESSION['cart']['user_data'] почти пустой, если пользователь зашел на сайт, но только бродит по нему, ничего не добавляя в корзину.
А вот $_SESSION['customer_loc'] может определить язык и валюту, которая отображается для этого конкретного покупателя

Ведь язык и валюта не наугад же берутся, наверняка страна то определяется. В моем случае город и, например, область и т.п. являются логическим продолжение той же страны. И если есть специальное хранилище для местоположения, пусть даже на уровне страны, логично будет использовать именно его. Просто я раньше видел этот массив в сессии ($_SESSION['customer_loc']), то сейчас он пропал.

Судя по коду, $_SESSION['customer_loc'] используется для расчета стоимости доставки и обнуляется после первого использования

А вот $_SESSION['customer_loc'] может определить язык и валюту, которая отображается для этого конкретного покупателя

В $_SESSION['customer_loc'] хранится информация о текущей локализации

Даже не знаю :shock: .

Ведь язык и валюта не наугад же берутся, наверняка страна то определяется. В моем случае город и, например, область и т.п. являются логическим продолжение той же страны. И если есть специальное хранилище для местоположения, пусть даже на уровне страны, логично будет использовать именно его. Просто я раньше видел этот массив в сессии ($_SESSION['customer_loc']), то сейчас он пропал.

Язык определяется по следующим параметрам (в порядке приоритета)

- параметр sl в адресной строке

- язык браузера

- настройка дефолтного языка

- в сессии параметр "cart_languageC"

- первый язык из доступных

Валюта:

- параметр currency в адресной строке

- в сессии параметр "secondary_currencyC"

- первая валюта из доступных

Нужна помощь, самому не справиться)

подключился к unisende, при оформлении заказа есть галочка о согласии на подписку. Хочу чтоб галочка по умолчанию стояла, а то многие не ставят.
Нашёл шаблон в котором выводится и код:

{$list.title}
Что нужно здесь подправить? Самостоятельно удалил функцию и получилось вот так:
{$list.title}
галочка стоит теперь по умолчанию, обрадовался, но смс не отправляются) Помогите.

Нужна помощь, самому не справиться)

подключился к unisende, при оформлении заказа есть галочка о согласии на подписку. Хочу чтоб галочка по умолчанию стояла, а то многие не ставят.
Нашёл шаблон в котором выводится и код:

{$list.title}
Что нужно здесь подправить? Самостоятельно удалил функцию и получилось вот так:
{$list.title}
галочка стоит теперь по умолчанию, обрадовался, но смс не отправляются) Помогите.

Всё заработало, просто дольше смски стали идти почемуто.

Язык определяется по следующим параметрам (в порядке приоритета)

Спасибо!

И, наверное, последний вопрос на эту тему.

Есть в настройках витрины вкладка "Регионы", там настройка стран. Вот может это как-то связано с $_SESSION['customer_loc'].

И еще нашел настройки локализации Настройки -> Доставка и налоги -> Локализация - что это?

В $_SESSION['customer_loc'] хранится информация о текущей локализации

А вот $_SESSION['customer_loc'] может определить язык и валюту, которая отображается для этого конкретного покупателя

И все таки как его увидеть то?

Есть в настройках витрины вкладка "Регионы", там настройка стран. Вот может это как-то связано с    $_SESSION['customer_loc'].

Проверили, нет.

И еще нашел настройки локализации   Настройки -> Доставка и налоги -> Локализация -  что это?

Это собственно настройка локализаций. Можно настроить несколько локализаций, например, в одной будет доступен только определенный ряд товаров, только одна валюта и один язык. В другой будет работать только другая валюта и, например, оба языка, и другие товары (хотя витрина может быть и одна, но видимостью товаров управляет локализация). Страна покупателя определяется по IP, отсюда определяется локализация, которая настроена для этой страны. Можно добавить пользователю возможность выбирать локализацию.

И все таки как его увидеть то?

Этот параметр использует функция fn_need_shipping_recalculation из файла fn.cart.php. И после обращения нему тут же удаляет. Ненадежная вещь, похоже.

Параметр в принципе используется только при расчете стоимости доставки. Он определяет именно локацию (а не локализацию) покупателя. По этой локации определяется расчет тарифов доставки для ручных способов доставки