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

Любые вопросы по созданию модулей, контроллерам, хукам, php, smarty, html, css и так далее.



Постараемся ответить.



Рекомендую, первоначально ознакомиться с видеоинструкциями:

Разработка PHP:

https://www.youtube.com/playlist?list=PL4okpC0OV7TTa1iFmcPTL-outH4wEMJQW

Модификация шаблонов:

https://www.youtube.com/playlist?list=PL4okpC0OV7TQmBjqBe6_PXM_S2xRDVrKa

Подскажите где контроллер и вид админки (control-panel.php) просто в url нет подсказок.

[quote name='GPK1929' timestamp='1424959807' post='206535']

Подскажите где контроллер и вид админки (control-panel.php) просто в url нет подсказок.

[/quote]



index.php

index.tpl

Подскажите, как вытащить значение из произвольного поля таблицы cscart_products в шаблон?



Например, выгружаю из 1С в “1c_code” дополнительное поле (создано мной), хочу заменить артикул на значение этого поля.



Редактирую /public_html/design/backend/templates/views/products/manage.tpl


<br /> <div class="product-code"><br /> <span class="product-code-label row-status">{__("sku")} </span><br /> <input type="text" name="products_data[{$product.product_id}][1c_code]" size="15" maxlength="32" value="{$product.1c_code}" class="input-hidden span2" /><br /> </div><br />



[attachment=9163:image1.png]



Не срабатывает … почему?

image1.png

[quote name=‘Saboteur’ timestamp=‘1425039977’ post=‘206612’]

Подскажите, как вытащить значение из произвольного поля таблицы cscart_products в шаблон?



Например, выгружаю из 1С в “1c_code” дополнительное поле (создано мной), хочу заменить артикул на значение этого поля.



Редактирую /public_html/design/backend/templates/views/products/manage.tpl


<br /> <div class="product-code"><br /> <span class="product-code-label row-status">{__("sku")} </span><br /> <input type="text" name="products_data[{$product.product_id}][1c_code]" size="15" maxlength="32" value="{$product.1c_code}" class="input-hidden span2" /><br /> </div><br />



[attachment=9163:image1.png]



Не срабатывает … почему?

[/quote]



Каким образом выгружаете из 1С?



Тут логика немножко другая. Зачем выгружать из 1С в какой то свой 1c_code , если можно сразу в product_code выгружать?



В базе данных значение для поля есть?

Выгружаю специальной обработкой под 1С. Да, значения в базе есть.


[quote][color=#282828][font=arial, verdana, tahoma, sans-serif]Зачем выгружать из 1С в какой то свой 1c_code , если можно сразу в product_code выгружать?[/font][/color][/quote]

Я и выгружаю сразу в [color=#282828][font=arial, verdana, tahoma, sans-serif]product_code, но мне еще нужен доп. параметр. Хочу видеть уникальный код (загрузил в [/font][/color][color=#282828][font=arial, verdana, tahoma, sans-serif]product_code)[/font][/color][color=#282828][font=arial, verdana, tahoma, sans-serif] и артикул (загрузил в [/font][/color]1c_code)[color=#282828][font=arial, verdana, tahoma, sans-serif] . В разных местах админки нужен то один то другой параметр. Когда принимаю заказ - код для заказа уникальный, когда заказываю товар поставщику - артикул.[/font][/color]

[quote name='Saboteur' timestamp='1425042102' post='206618']

Выгружаю специальной обработкой под 1С. Да, значения в базе есть.

[/quote]



Если в таблицу products добавляете то должен отображаться. Кэш очистите.



В принципе, популярный кейс, я сейчас сделаю видео. Так легче будет понять всю суть и магию.

[quote name='Saboteur' timestamp='1425042102' post='206618']

Выгружаю специальной обработкой под 1С. Да, значения в базе есть.



[/quote]



Снял. Вот в этом плейлисте. Полный процесс создания новой настройки товара с помощью модуля в видео с 16-19 . Вам в принципе будет достаточно 18 и 19.



Даниил, спасибо! Наконец то стали ясны причины, по которым не отображались данные.



Формат, в котором Вы делитесь информацией - отлично подобран и понятен.

Вопрос, где лежит шаблон счета ?dispatch=orders.print_invoice& ?



Правильно ли я понимаю, что для администратора(бэкенд) и покупателя(фронтенд) эти счета обрабатываются по разному?

[quote name='Saboteur' timestamp='1425205080' post='206685']

Вопрос, где лежит шаблон счета ?dispatch=orders.print_invoice& ?



Правильно ли я понимаю, что для администратора(бэкенд) и покупателя(фронтенд) эти счета обрабатываются по разному?

[/quote]



Да, правильно понимаете.



Шаблоны писем лежат:

  • Админка

    design/backend/mail


  • Витрина

    design/themes/[название_темы]/mail

[quote name='Saboteur' timestamp='1425205080' post='206685']

Вопрос, где лежит шаблон счета ?dispatch=orders.print_invoice& ?



Правильно ли я понимаю, что для администратора(бэкенд) и покупателя(фронтенд) эти счета обрабатываются по разному?

[/quote]



Контроллер вызывает функцию fn_print_order_invoices



Если вы откроете данную функцию в файле app/functions/fn.cart.php



То увидите вызываемый шаблон из папки Mail:

<br /> if ($pdf == true) {<br /> fn_disable_live_editor_mode();<br /> $html[] = $view->displayMail(&#39;orders/print_invoice.tpl&#39;, false, $area, $order_info[&#39;company_id&#39;], $lang_code);<br /> } else {<br /> $view->displayMail(&#39;orders/print_invoice.tpl&#39;, true, $area, $order_info[&#39;company_id&#39;], $lang_code);<br /> if ($order_id != end($order_ids)) {<br /> echo("<div style=&#39;page-break-before: always;&#39;>&nbsp;</div>");<br /> }<br /> }



Есть ещё ситуация, когда отправляются письмо по email .



Тогда используется класс Mailer . Пример можно посмотреть в модуле “Конструктор форм”



Файл:

app/addons/form_builder/func.php




<br /> Mailer::sendMail(array(<br /> &#39;to&#39; => $page_data[&#39;form&#39;][&#39;general&#39;][FORM_RECIPIENT],<br /> &#39;from&#39; => $from,<br /> &#39;reply_to&#39; => $sender,<br /> &#39;data&#39; => array(<br /> &#39;max_length&#39; => $max_length,<br /> &#39;elements&#39; => $page_data[&#39;form&#39;][&#39;elements&#39;],<br /> &#39;form_title&#39; => $page_data[&#39;page&#39;],<br /> &#39;form_values&#39; => $form_values,<br /> ),<br /> &#39;attachments&#39; => $attachments,<br /> &#39;tpl&#39; => &#39;addons/form_builder/form.tpl&#39;,<br /> &#39;is_html&#39; => $is_html<br /> ), &#39;A&#39;);



Здесь вы тоже увидите шаблон который будет отправлен, а также 'A' в конце значит, что шаблон будет взят из зоны администратора 'design/backend/mail'

Хотим реализовать возможность задавать seo_name для значений списочных типов характеристик (Список - Число и Список - Текст), наподобие, как это сделано для типа Бренд/Производитель. Есть ли какое-то простое решение?

[quote name='antibura' timestamp='1425286248' post='206730']

Хотим реализовать возможность задавать seo_name для значений списочных типов характеристик (Список - Число и Список - Текст), наподобие, как это сделано для типа Бренд/Производитель. Есть ли какое-то простое решение?

[/quote]



Немного не понял. Пример страницы дайте для наглядности.



Я видел модуль seo имен для результатов работы фильтра.

[quote name=‘dbazhenov’ timestamp=‘1425295026’ post=‘206761’]

Немного не понял. Пример страницы дайте для наглядности.



Я видел модуль seo имен для результатов работы фильтра.

[/quote]

Примера пока нет. В свойствах характеристики с типом “Бренд/Производитель” для каждого из вариантов мы можем задать изображение, описание, ссылку на сайт и seo-url. Нам бы хотелось распространить такую возможность (задавать и редактировать Seo-url вручную) для значений типов характеристик “Выпадающий список - Число” и “Выпадающий список - Текст”.



Я говорю о значениях, записываемых в таблицу cscart_seo_names с типом E.

[quote name=‘antibura’ timestamp=‘1425297215’ post=‘206767’]

Примера пока нет. В свойствах характеристики с типом “Бренд/Производитель” для каждого из вариантов мы можем задать изображение, описание, ссылку на сайт и seo-url. Нам бы хотелось распространить такую возможность (задавать и редактировать Seo-url вручную) для значений типов характеристик “Выпадающий список - Число” и “Выпадающий список - Текст”.



Я говорю о значениях, записываемых в таблицу cscart_seo_names с типом E.

[/quote]



Ну для вариантов характеристики с типом E , есть отдельная страница для каждого варианта, там и используется SEO имя.



Проще для всех нужных характеристик использовать тип E , так как только для неё есть отдельная страница.



Есть так же страница со списком вариантов, она соответствует фильтру по какой то харакетристике (странице Бренды)

Подскажите, как добавить в настройки "Антибот (captcha) еще один пункт для раздела “Использовать для”?



Я добавил запись в таблицу cscart_settings_objects, все значения ввел по аналогии с другими пунктами, в name написал “use_for_call_requests”.

В нужном шаблоне добавил:

<br /> {include file="common/image_verification.tpl" option="use_for_call_requests"}<br />



В нужном контроллере прописал условие:

<br /> if (fn_image_verification(&#39;use_for_call_requests&#39;, $_REQUEST) == false) {<br /> <br /> } <br />



Но каптча не появляется, что упускаю?

[quote name=‘Alexder’ timestamp=‘1425367173’ post=‘206872’]

Подскажите, как добавить в настройки "Антибот (captcha) еще один пункт для раздела “Использовать для”?

Но каптча не появляется, что упускаю?

[/quote]



Посмотрю.

[quote name=‘Alexder’ timestamp=‘1425367173’ post=‘206872’]

Подскажите, как добавить в настройки "Антибот (captcha) еще один пункт для раздела “Использовать для”?



Я добавил запись в таблицу cscart_settings_objects, все значения ввел по аналогии с другими пунктами, в name написал “use_for_call_requests”.

В нужном шаблоне добавил:

<br /> {include file="common/image_verification.tpl" option="use_for_call_requests"}<br />



В нужном контроллере прописал условие:

<br /> if (fn_image_verification(&#39;use_for_call_requests&#39;, $_REQUEST) == false) {<br /> <br /> } <br />



Но каптча не появляется, что упускаю?

[/quote]



Должно работать. Добавьте в шаблон следущий код и посмотрите, есть ли в отображаемом массиве ваша настройка


<br /> {$settings.Image_verification|fn_print_r}<br />



P.S. Если капчу заполнили ранее (например, при заходе на сайт), она может не отображаться.

[quote name='eComLabs' timestamp='1425371862' post='206886']

P.S. Если капчу заполнили ранее (например, при заходе на сайт), она может не отображаться.

[/quote]

Спасибо! Именно в этом проблема оказалась, до этого один раз ввел верно и она больше не появлялась.