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

[quote name='densvi' timestamp='1427447390' post='209241']

Даниил, спасибо вам.



На этом рисунке я поменял опцию и поменялась цена, однако во всплывающем окне так соответственно все и осталось, т.к. используется цена по умолчанию без учета опции.

[/quote]



Создавайте файл:

design/themes/responsive/templates/addons/combination_price/hooks/products/prices_block.post.tpl



В него код:


[CODE]

Узнайте, как купить дешевле




Для того, чтобы купить этот товар дешевле:
1) Зарегистрируйтесь у нас на сайте.
В этом случае мы вам дадим скидку 5% и товар вам обойдется в {$product.price*0.95} руб.

2) Оплатите покупку наличными.
Мы дадим вам скидку еще 3%. В этом случае товар вам обойдется в {$product.price*0.95*0.97} руб.

Это ваша гарантированная цена {$product.price*0.95*0.97} руб.

А если вы купите этот товар в свой день рождения, то мы вам предоставим дополнительную скидку в 3%, тогда стоимость этого товара для вас составит всего {$product.price*0.95*0.97*0.97} руб.




[/CODE]

Если нужно пояснение, почему и зачем, скажите, вроди всё понятно.

У вас всё правильно было, я просто использовал хук из product_data.tpl и сделал оболочку как у цены:
[CODE]


{* любой код, который будет обновляться при смене опций. *}


[/CODE]

[quote name='densvi' timestamp='1427447390' post='209241']

Даниил, спасибо вам.



На этом рисунке я поменял опцию и поменялась цена, однако во всплывающем окне так соответственно все и осталось, т.к. используется цена по умолчанию без учета опции.

[/quote]



Второй вариант (более правильный):


  1. В хуку отрисовки цены в файле common/product_data.tpl , отрисовываем ссылку, которая будет открывать блок

    Создаём файл:

    design/themes/responsive/templates/addons/combination_price/hooks/products/prices_block.post.tpl



    Туда пилим код нашей ссылки:

<a class="cm-dialog-opener cm-dialog-auto-size my-a-dashed1" data-ca-target-id="open_id_{$obj_id}">Узнайте, как купить дешевле</a>



2. В самом конце файла common/product_data.tpl есть хук, который позволяет любой код добавить, мы туда добавим блок попапа который будет открываться по ссылке.

Создаём файл:

design/themes/responsive/templates/addons/combination_price/hooks/products/product_data.post.tpl



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

Код такой:


[CODE]



Для того, чтобы купить этот товар дешевле:
1) Зарегистрируйтесь у нас на сайте.
В этом случае мы вам дадим скидку 5% и товар вам обойдется в {$product.price*0.95} руб.

2) Оплатите покупку наличными.
Мы дадим вам скидку еще 3%. В этом случае товар вам обойдется в {$product.price*0.95*0.97} руб.

Это ваша гарантированная цена {$product.price*0.95*0.97} руб.

А если вы купите этот товар в свой день рождения, то мы вам предоставим дополнительную скидку в 3%, тогда стоимость этого товара для вас составит всего {$product.price*0.95*0.97*0.97} руб.



[/CODE]

Даниил, спасибо огромное, заработало!!!

Я просто не использовал хуки, хотел просто посмотреть принципиально. Вроде все так же как и вы делал, только без хуков. Вот что значит - делать сразу по правильному! Спасибо еще раз.



Есть правда еще несколько вопросов:

  1. Чтобы я не делал у всплывающего окна появляется полоса прокрутки. Менял и текст и форматирование - есть полоса прокрутки и все. Причем реально немного прокручивается






  2. Какой функцией отрезать копейки вместе с точкой после расчетов?


  3. Ссылка “Узнайте, как купить дешевле” появляется теперь и в каталоге. Как её убрать?

В дополнение к предыдущему посту



3) [color=#282828][font=arial, verdana, tahoma, sans-serif]Ссылка “Узнайте, как купить дешевле” появляется теперь и в каталоге. Как её убрать? А может и не стоит убирать, тогда как изменить её CSS не меняя оформление ссылки в карточке товара???[/font][/color]



[quote name='densvi' timestamp='1427464675' post='209290']

Даниил, спасибо огромное, заработало!!!


  1. Чтобы я не делал у всплывающего окна появляется полоса прокрутки. Менял и текст и форматирование - есть полоса прокрутки и все. Причем реально немного прокручивается


  2. Какой функцией отрезать копейки вместе с точкой после расчетов?


  3. Ссылка “Узнайте, как купить дешевле” появляется теперь и в каталоге. Как её убрать?

    [/quote]


  1. Что то с дивами обёртками, какие то им CSS правила нужно задать, высоту или clearfix или ещё что то , не помню.


  2. Выводить цену через:

{include file="common/price.tpl" value=$product.price span_id="" class="" }



или любые php функции по работе со строками.



3. Поставить в хуках условие по контроллеру и моду или по $selected_template в списке товаров такая есть переменная.

[quote name='dbazhenov' timestamp='1427465364' post='209293']

3. Поставить в хуках условие по контроллеру и моду или по $selected_template в списке товаров такая есть переменная.

[/quote]



Даниил, насчет условия, подошло только такое:


<br /> {if $_REQUEST[&#39;dispatch&#39;] == "products.view" || $_REQUEST[&#39;dispatch&#39;] == "products.options"}<br />



Как-то по другому контроллер не смог определить, а переменная [color=#282828][font=arial, verdana, tahoma, sans-serif]$selected_template отсутствует или пустая.[/font][/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]Так как я сделал - это правильно? Вроде работает, но правильно ли сделано?[/font][/color]

[quote name='densvi' timestamp='1427481950' post='209340']

[color=#282828][font=arial, verdana, tahoma, sans-serif]Так как я сделал - это правильно? Вроде работает, но правильно ли сделано?[/font][/color]

[/quote]



Я использую массив {$runtime}


{if $runtime.controller == &#39;products&#39; && $runtime.mode == &#39;view&#39;}



Чаще всего в блоках использую:

<br /> {$runtime|fn_print_r}<br /> {$addons|fn_print_r}<br /> {$settings|fn_print_r}<br /> {$block|fn_print_r}<br />

Даниил, спасибо. Взял на заметку.

Кстати, когда меняешь опции, mode меняется с “view” на “options”

[quote name=‘densvi’ timestamp=‘1427533820’ post=‘209379’]

Даниил, спасибо. Взял на заметку.

Кстати, когда меняешь опции, mode меняется с “view” на “options”

[/quote]



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



Тогда {$smarty.request}

Добрый день.

Что-то я запутался.

На главной странице сверху у меня есть ссылка, которая открывает ajax-форму для выбора значений. Надо чтобы форму обрабатывал мой модуль и выводил выбранное значение.



Распишите, пожалуйста, схему для модуля, где должны быть шаблоны формы, файлы обработки формы. Спасибо.

[quote name='pcguru' timestamp='1427869306' post='209791']

Добрый день.

Что-то я запутался.

На главной странице сверху у меня есть ссылка, которая открывает ajax-форму для выбора значений. Надо чтобы форму обрабатывал мой модуль и выводил выбранное значение.



Распишите, пожалуйста, схему для модуля, где должны быть шаблоны формы, файлы обработки формы. Спасибо.

[/quote]



Есть видео-курс, там уже рассказано всё что вам нужно:

  1. Начало о работе контроллеров.
  2. Серия “Как работает Ajax”



    Не совсем понятно ваша задача, поэтому описать какую либо схему невозможно. Вариантов реализации как минимум 3.

[quote name='pcguru' timestamp='1427869306' post='209791']

Что-то я запутался.

[/quote]



В чём именно?


  1. Контроллер обрабатывает.
  2. Шаблон отображает.



    Всё просто.



    Описывайте задачу детально, помогу, сейчас это гадание по звёздам.


открывает ajax-форму для выбора значений



Ссылка может открывать:

  1. Скрытый блок с формой.
  2. Подгружать форму какого то контроллера.
  3. Открывать форму отрисованную скриптом.



    Скриншот хоть приложите или кусок кода.



    [color=#282828][font=arial, verdana, tahoma, sans-serif]Надо чтобы форму обрабатывал мой модуль и выводил выбранное значение.[/font][/color]



    [color=#282828][font=arial, verdana, tahoma, sans-serif]А форму вы создали не модулем?[/font][/color]



    Что значит обрабатывал? Непонятно, что нужно сделать
  4. При открытии формы отображал нужные поля, в зависимости от условий? или
  5. При отправке формы, нужно данные из формы обрабатывать как то по особому?



    [color=#282828][font=arial, verdana, tahoma, sans-serif]и выводил выбранное значение.[/font][/color]



    [color=#282828][font=arial, verdana, tahoma, sans-serif]Что значит выводил? Куда выводил? После чего выводил? [/font][/color]



    [color=#282828][font=arial, verdana, tahoma, sans-serif]Кстати примеров форм очень много, тот же модуль “Обратный звонок”. [/font][/color]

Даниил, у pcguru вопрос очень похож на следующий шаг в геотаргетинге. Когда высвечивается автоматически определенный город по IP, а посетитель хочет его поменять. Нажимает, высвечивается список городов, он выбирает новый, окно автоматом закрывается, а выбранный им город высвечивается вместо ранее определенного.



Как это сделать мне уже понятно. Надеюсь, что вскоре у вас появится третье видео в серии геотаргетинга.



Мне вот лично просто не совсем понятно, как отобразить список городов? Как сделать так, чтобы при клике на город окно закрылось с запоминанием выбранного города. Остальное уже знаю :)

[quote name='densvi' timestamp='1427875098' post='209805']

Даниил, у pcguru вопрос очень похож на следующий шаг в геотаргетинге.

[/quote]



А может вопрос совершенно в другом?



Вы же детально описываете задачу и быстро получаете правильный ответ. Зачем тратить время друг друга на гадания.

[quote name=‘densvi’ timestamp=‘1427875098’ post=‘209805’]

Даниил, у pcguru вопрос очень похож на следующий шаг в геотаргетинге. Когда высвечивается автоматически определенный город по IP, а посетитель хочет его поменять. Нажимает, высвечивается список городов, он выбирает новый, окно автоматом закрывается, а выбранный им город высвечивается вместо ранее определенного.

[/quote]



Итак, ответы :)


  1. По клику открыть список городов. Два варианта:

    а. Верстаем блок сами и открываем его по клику.

    б. Делаем контроллер и страничку , аналогично модулю “Самовывоз” , только без карты и прочего, только города. После чего открываем этот контроллер по клику.


  2. При клике по городу в popup обработать клик.

    Пример на странице оформления заказа, выбор способа доставки, модуль “Самовывоз” .

    Данный модуль добавляет список пунктов самовывоза, при клике отправляется Ajax запрос функцией на контроллер, контроллер делает запись в сессию и обновляет блок.


  3. При клике по городу закрыть попап.

    Смотрим модуль “Купить в один клик” , на кнопке есть микроформат, (класс) cm-form-dialog-closer .

    От этого работаем.

Даниил, спасибо Вам огромное за Ваши ответы и наводки, и за терпение.

Похоже я действительно неправильно задаю вопросы.

Просмотрел все Ваши видео. Сделал несколько своих модулей по модификации отображения каталога и карточки товара.

Но наверное я не до конца не разобрался в структуре cs-cart.

Можете объяснить на пальцах такой момент:

  1. Как вызвать мой модуль (как прописать путь на кнопке или ссылки) из любого места системы.
  2. Как организовать шаблоны модуля (как называть), где прописывать пути к шаблону в php-файле модуля (в каком файле модуля), как их назвать и как их отображать при вызове (из п.1.).

    Как-то так.

[quote name='pcguru' timestamp='1427880766' post='209817']

  1. Как вызвать мой модуль (как прописать путь на кнопке или ссылки) из любого места системы.
  2. Как организовать шаблоны модуля (как называть), где прописывать пути к шаблону в php-файле модуля (в каком файле модуля), как их назвать и как их отображать при вызове (из п.1.).

    Как-то так.

    [/quote]



    Давайте исходить от задачи.



    Нельзя вызвать модуль, модуль может изменять всё на свете и делать тоже самое что и система.



    Есть существующий модуль, похожий на то что вам нужно?



    Что вы хотите сделать?


  3. Вызывать ничего не нужно, модуль может работать в любом месте или в указанном вами.
  4. Что вам нужно? Страница или блок?

[quote name=‘pcguru’ timestamp=‘1427880766’ post=‘209817’]

Просмотрел все Ваши видео. Сделал несколько своих модулей по модификации отображения каталога и карточки товара.

[/quote]



Вряд ли посмотрели все, потому что плейлист “Разработка” как раз рассказывает как работают страницы, формы как их изменять и создавать с помощью модуля.



https://www.youtube…PTL-outH4wEMJQW



Посмотрите разработку не спеша и всё будет понятно.



Либо скажите что хотите сделать, потому что до сих пор непонятна задача.



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



Вам нужна схема модуля и пути, она есть в документации:

http://www.cs-cart.ru/docs/4.2.x/developer/core/structured/index.html



Давайте конкретно, что нужно сделать.



Потому что, если нет конкртеной задачи и вам нужна своя страница, то смотрите модуль “Самовывоз” и видео о том как работают контроллеры в курсе выше.



Если вам нужен свой блок, то смотрите как работают блоки.

Спасибо. Буду смотреть.

[quote name=‘pcguru’ timestamp=‘1427883883’ post=‘209835’]

Спасибо. Буду смотреть.

[/quote]



Лучше посмотреть, так как часть вопросов отпадёт.



Ну или описать пример который хотите реализовать, вот пример описания:

http://forum.cs-cart…post__p__209241