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


#641

У вас форма постом уходит, а при запуске в браузере используется метод GET. Cкорее всего в этом проблема. Попробуйте поменять метод или делайте редирект после обработки данных формы в контроллере

Спасибо огромное! Часа два с этим мучился. Интересно почему так происходит?

Еще пробовал вариант отправки формы через ссылку с классом cm-submit, форма не отправляется (данные до контроллера не доходят), хотя на странице редактирования товара используется именно этот метод отправки.


#642

делайте редирект после обработки данных формы в контроллере

А может есть для этого функция стандартная?


#643

А может есть для этого функция стандартная?

Посмотрите любой контроллер. Код такой нужно использовать

return array(CONTROLLER_STATUS_REDIRECT, 'label_print.update');

#644

Посмотрите любой контроллер. Код такой нужно использовать

Да работает. Только вот так, наверное нельзя сделать:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($mode == 'update') {
        $products_ids = empty($_REQUEST['label_print']['product_ids']) ? array() : explode(',', $_REQUEST['label_print']['product_ids']);
    $print_data = array();

    foreach ($products_ids as $k) {
        $product_data = db_get_hash_array("SELECT product_id, product_code FROM ?:products WHERE product_id = ?i", 'product_id', $k);
        $print_data += $product_data;
    }
    Tygh::$app['view']->assign('print_data', $print_data);
    return array(CONTROLLER_STATUS_REDIRECT, 'label_print.update');
}

}

Данные обработки теряются. Я их в return могу добавить? У меня получилось что обработка, а затем редирект на тот же контроллер только без отправки формы с потерей результатов обработки.


#645

Здравствуйте.

Подскажите, пожалуйста, как сделать, чтобы при изменении опции товара в каталоге его цена пересчитывалась автоматически, так же, как и на странице товара?


#646

Да работает. Только вот так, наверное нельзя сделать:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($mode == 'update') {
        $products_ids = empty($_REQUEST['label_print']['product_ids']) ? array() : explode(',', $_REQUEST['label_print']['product_ids']);
    $print_data = array();

    foreach ($products_ids as $k) {
        $product_data = db_get_hash_array("SELECT product_id, product_code FROM ?:products WHERE product_id = ?i", 'product_id', $k);
        $print_data += $product_data;
    }
    Tygh::$app['view']->assign('print_data', $print_data);
    return array(CONTROLLER_STATUS_REDIRECT, 'label_print.update');
}

}

Данные обработки теряются. Я их в return могу добавить? У меня получилось что обработка, а затем редирект на тот же контроллер только без отправки формы с потерей результатов обработки.

Попробуйте так

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($mode == 'update') {
        fn_save_post_data('label_print');
        return array(CONTROLLER_STATUS_REDIRECT, 'label_print.update');
    }
}

if ($mode == ‘update’) {
$label_print = fn_restore_post_data(‘label_print’);
$products_ids = empty($label_print[‘product_ids’]) ? array() : explode(’,’, $label_print[‘product_ids’]);

    $print_data = array();

    foreach ($products_ids as $k) {
        $product_data = db_get_hash_array("SELECT product_id, product_code FROM ?:products WHERE product_id = ?i", 'product_id', $k);
        $print_data += $product_data;
    }
    Tygh::$app['view']->assign('print_data', $print_data);

}


Здравствуйте.

Подскажите, пожалуйста, как сделать, чтобы при изменении опции товара в каталоге его цена пересчитывалась автоматически, так же, как и на странице товара?

Вы в каком шаблоне каталога показываете опции?


#647

Попробуйте так

Спасибо!!! Так все работает.

Не знал я о таких готовых функциях. Разработчикам надо мануал по функциям сделать, какая за что отвечает. Многие вопросы по разработке отпадут (по крайней мере у меня :grin: ).

Еще раз спасибо.


#648

Спасибо!!! Так все работает.

Не знал я о таких готовых функциях. Разработчикам надо мануал по функциям сделать, какая за что отвечает. Многие вопросы по разработке отпадут (по крайней мере у меня :grin: ).

Еще раз спасибо.

а пока скудные комментарии к функциям и fn_print_r чтобы понять что функция хочет на входе и выдает на выходе )

Спасибо eComLabs а то ж некоторые вещи методом тыка не очень даются уразуменимю )


#649

а пока скудные комментарии к функциям и fn_print_r чтобы понять что функция хочет на входе и выдает на выходе )

Спасибо eComLabs а то ж некоторые вещи методом тыка не очень даются уразуменимю )

Это точно.

Хочется услышать официальное мнение.


#650

Попробуйте так

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($mode == 'update') {
        fn_save_post_data('label_print');
        return array(CONTROLLER_STATUS_REDIRECT, 'label_print.update');
    }
}

if ($mode == ‘update’) {
$label_print = fn_restore_post_data(‘label_print’);
$products_ids = empty($label_print[‘product_ids’]) ? array() : explode(’,’, $label_print[‘product_ids’]);

    $print_data = array();

    foreach ($products_ids as $k) {
        $product_data = db_get_hash_array("SELECT product_id, product_code FROM ?:products WHERE product_id = ?i", 'product_id', $k);
        $print_data += $product_data;
    }
    Tygh::$app['view']->assign('print_data', $print_data);

}

Вы в каком шаблоне каталога показываете опции?

products_multicolumns


#651

products_multicolumns

Надо на месте посмотреть. Если опции показываете стандартным кодом, должно работать без доп. изменений


#652

Здравствуйте!

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

К примеру в js это функция $.ceNotification() а в php fn_set_notification() с типом 'N', такое сообщение исчезает примерно через 5сек, хочу изменить на 15сек.

Спасибо!


#653

Здравствуйте!

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

К примеру в js это функция $.ceNotification() а в php fn_set_notification() с типом 'N', такое сообщение исчезает примерно через 5сек, хочу изменить на 15сек.

Спасибо!

В админке в настройке Время отображения уведомлений.


#654

Здравствуйте, подскажите пожалуйста:

Версия мультивендор

Есть два поля:

Артикул и Артикул продавца

Артикул продавца = стандартному sku

А просто "Артикул" создан как новая настройка продукта по видеоуроку.

Как бы так сделать, чтобы поиск работал по этой настройке товара?


#655

Здравствуйте, подскажите пожалуйста:

Версия мультивендор

Есть два поля:

Артикул и Артикул продавца

Артикул продавца = стандартному sku

А просто "Артикул" создан как новая настройка продукта по видеоуроку.

Как бы так сделать, чтобы поиск работал по этой настройке товара?

Вам нужно использовать хук additional_fields_in_search в функции fn_get_products (app/functions/fn.catalog.php)

Смотрите, как идет поиск по параметру pcode_from_q


#656

Добрый день, коллеги. Возникла следующая задача: при добавлении товара в корзину - изменять кнопку "В корзину" на "В корзине 4 шт."

При этом возникает проблема с отображением кол-ва товаров добавленных в корзину на странице списка товаров (каталог).
Для добавления информации о товарах из корзины используется хук get_products_post либо gather_additional_products_data_post (без разницы).
В result_ids добавлено "category_products_*" данный блок возвращается, однако данные не верны.
Видимо страница уже отдается из кеша и хуки не срабатывают.
Пробовал вносить изменения в файле blocks для раздела 'products':
'disable_cache_when' => array(
'callable_handlers' => array(
array('fn_block_products_disable_cache', array('$block_data'))
),
'session_handlers' => array(
'cart.amount' => array('gt', 0)
)
)

Подскажите, пожалуйста, есть ли идеи, как брать информацию не из кеша. Спасибо большое!


#657

В result_ids добавлено "category_products_*" данный блок возвращается, однако данные не верны.


Что значит данные не верны? Мы делали подобный функционал, кэш не трогали

#658

Что значит данные не верны? Мы делали подобный функционал, кэш не трогали

Данные приходят с нулевым количеством товара видимо минуя бекенд отдается сохраненная штмл. Раньше тоже реализовывал подобный функционал, на более старой версии (4.3.3) без проблем, но видимо в новой версии (4.3.6) по другому работает система кеширования. Однако, если начать фильтровать товар или переключиться на другой стиль отображения товара, все работает. http://cnc.segalp.ru/instrument-dlya-snyatiya-zausencev-grattec/


#659

Данные приходят с нулевым количеством товара видимо минуя бекенд отдается сохраненная штмл. Раньше тоже реализовывал подобный функционал, на более старой версии (4.3.3) без проблем, но видимо в новой версии (4.3.6) по другому работает система кеширования. Однако, если начать фильтровать товар или переключиться на другой стиль отображения товара, все работает. http://cnc.segalp.ru/instrument-dlya-snyatiya-zausencev-grattec/

Скорее всего проблема в том, что post запрос добавления в корзину заканчивается кодом

return array(CONTROLLER_STATUS_OK, 'checkout.cart');

Т.е. по айдишнику контент ищется в коде странице корзины, а не категории. Поэтому изменения не показываются.


#660

Скорее всего проблема в том, что post запрос добавления в корзину заканчивается кодом

return array(CONTROLLER_STATUS_OK, 'checkout.cart');

Т.е. по айдишнику контент ищется в коде странице корзины, а не категории. Поэтому изменения не показываются.

Попробовал ради эксперимента заменить приведенный код на - return array(CONTROLLER_STATUS_OK, 'category.view?category_id=1'); - без изменений. Да и при простом обновлении страницы - с явно правильным контроллером, который содержит нужную информацию отображается нулевое кол-во.

Я все-же склонен к тому что проблема именно в кешировании, т.к. если в админке в разделе "Дизайн" - "Темы" выбрать "Обновлять кэш автоматически" - то все работает безупречно, но не хочется отказываться от кеширования полностью.

Покапавшись в директории с кешем были найдены сохраненные результаты функции get_products в директории "/var/cache/registry/" - логично предположить что от кеширования результатов при задуманном функционале придется отказаться, с помощью хука "get_products_pre" и параметра "use_caching" переведенного в false удалось отключить кеширование результатов функции. Результатов не принесло, вот это уже странно.

В какую сторону дальше копать ума не приложу