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

[quote name='a_tsvetkov' timestamp='1428318167' post='210413']

Они, как я понял, доступны на всех страницах? Основные кнопки для товаров формируются, видимо, именно там. Логики много, попробую разобраться.

[/quote]



Они доступны на тех страницах где вызывается common/product_data.tpl .



Это обычно страницы товаров и страницы где есть блоки с товарами.



Вы можете заметить, что вызывается этот файл так:

{include file="common/product_data.tpl" product=$product}



Тоесть туда передаётся массив с данными о товаре.



А внутри product_data.tpl , мы видим:


{assign var="obj_id" value=$obj_id|default:$product.product_id}



Тоесть, создаётся obj_id равный $product.product_id , если не передан напрямую.



А потом пошли создаваться capture. Сами объекты.




<br /> {capture name="sku_`$obj_id`"}<br /> {if $show_sku}<br /> <div class="ty-control-group product-list-field cm-reload-{$obj_prefix}{$obj_id}{if !$product.product_code} hidden{/if}" id="sku_update_{$obj_prefix}{$obj_id}"><br /> <input type="hidden" name="appearance[show_sku]" value="{$show_sku}" /><br /> <label class="ty-control-group__label" id="sku_{$obj_prefix}{$obj_id}">{__("sku")}:</label><br /> <span class="ty-control-group__item" id="product_code_{$obj_prefix}{$obj_id}">{$product.product_code}</span><br /> <!--sku_update_{$obj_prefix}{$obj_id}--></div><br /> {/if}<br /> {/capture}<br /> <br />



Вы можете понять, что этот отрисовывается отображение кода товара.


{capture name="sku_`$obj_id`"}



Название, создаётся с учётом $obj_id (product_id) , чтобы было уникальным для каждого товара, что есть на странице.



Ну а когда это всё создано, нужные заготовоки уже отображаются в шаблоне:




<br /> {assign var="sku" value="sku_$obj_id"}<br /> {$smarty.capture.$sku nofilter}<br />



Где имя создаётся из данных и отображается.

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

[color=#282828][font=arial, verdana, tahoma, sans-serif]Добавил в файле templates / views / checkout / components / checkout_login.tpl такой javascript код[/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif]<br /> $(document).ready(function(){<br /> $(&#39;#checkout_type_guest&#39;).click()<br /> })[/font][/color]<br /> [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]Все получилось :grin:. Это нормальное решение или можно сделать лучше?[/font][/color]

[quote name=‘VetalM’ timestamp=‘1428496400’ post=‘210691’]

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

[color=#282828][font=arial, verdana, tahoma, sans-serif]Добавил в файле templates / views / checkout / components / checkout_login.tpl такой javascript код[/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif]<br /> $(document).ready(function(){<br /> $(&#39;#checkout_type_guest&#39;).click()<br /> })[/font][/color]<br /> [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]Все получилось :grin:. Это нормальное решение или можно сделать лучше?[/font][/color]

[/quote]



Главное, чтобы вам нравилось, скоро обновление, там всё равно будет изменен чекаут.

Добрый день еще раз!

Дублирую вопрос в этой теме.



Подскажите, пожалуйста, можно ли реализовать следующую задачу:

Отображение количества товаров в наличии следующим образом - от 1 до 5 показывается конкретными цифрами, а если 6 и больше - тогда надпись: “больше 5”?

Заранее спасибо!

[quote name='Boris' timestamp='1428583163' post='210836']

Добрый день еще раз!

Дублирую вопрос в этой теме.



Подскажите, пожалуйста, можно ли реализовать следующую задачу:

Отображение количества товаров в наличии следующим образом - от 1 до 5 показывается конкретными цифрами, а если 6 и больше - тогда надпись: “больше 5”?

Заранее спасибо!

[/quote]



Быстрый вариант:

  1. Открыть файл:

    /design/themes/responsive/templates/common/product_data.tpl



    и найти

{$product_amount}&nbsp;{__("items")}



2. Заменить на:

[CODE]

{if $product_amount <= 5}

{$product_amount} {__(“items”)}

{else}

5 {__(“items”)}

{/if}[/CODE]


  1. Записать себе, что не забыть.



    По хорошему, если интересна модификация шаблонов, то пройти курс:

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

Спасибо за быстрое решение, Даниил!

Да, процесс обучения идет параллельно (эту задачу надо было быстро).

Уже создана папка Мой дизайн (как в видеоуроках), буду дальше вникать.

Давно не заходил на форум. Такой вопрос коротенький.



В новой версии решили вопрос: изменение дизайна/структуры инвойсов прямо в админке?



Нужно знать стоит ли обновлятся.

И еще. По поводу возможности отлючения отправки счетов/потдверждения выбранным клиентам.

или выставление эжемесячного счета.

[quote name='alex-pro' timestamp='1428614281' post='210886']

Давно не заходил на форум. Такой вопрос коротенький.



В новой версии решили вопрос: изменение дизайна/структуры инвойсов прямо в админке?



Нужно знать стоит ли обновлятся.

[/quote]



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

[quote name='dbazhenov' timestamp='1428655671' post='210919']

Новую версию уже можно скачать и посмотреть.

[/quote]



Можете посмотреть у нас:



http://dedic.ecom-labs.com/v431/admin.php

Даниил, здравствуйте. В продолжение темы, которую мы с вами обсуждали про ajax.



Сделал постконтроллер для карточки товара. В нем определил переменные и передал в смарти.

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



Как я говорил при выборе опции в карточке mode с “view” меняется на “options”. Думаю, что из-за этого и не вижу эти переменные.



Но как сделать, чтобы определенные, рассчитанные в постконтроллере переменные были доступны не только в режиме view ($mode == view), но и в options ???

[quote name=‘densvi’ timestamp=‘1428764104’ post=‘211085’]

Даниил, здравствуйте. В продолжение темы, которую мы с вами обсуждали про ajax.



Сделал постконтроллер для карточки товара. В нем определил переменные и передал в смарти.

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



Как я говорил при выборе опции в карточке mode с “view” меняется на “options”. Думаю, что из-за этого и не вижу эти переменные.



Но как сделать, чтобы определенные, рассчитанные в постконтроллере переменные были доступны не только в режиме view ($mode == view), но и в options ???

[/quote]



Сделать pre или post контроллер на тот который не обрабатывает ваши переменные.

[quote name='dbazhenov' timestamp='1428765195' post='211088']

Сделать pre или post контроллер на тот который не обрабатывает ваши переменные.

[/quote]



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



Registry::get('view')->assign('promobonu', $promobonu);



Что означает get('view'), а именно 'view'. Может с этим что-то связано?

Забыл добавить, может важно, что работа с этими переменными ведется в div, который обновляется ajax. Может с этим что связано?

[quote name='densvi' timestamp='1428780166' post='211099']

Забыл добавить, может важно, что работа с этими переменными ведется в div, который обновляется ajax. Может с этим что связано?

[/quote]



Когда выбираете опцию, отправляется Ajax запрос на какой то контроллер. Найдите этот контроллер (вы его уже нашли $runtime.controller и $runtime.mode).



Сделайте post контроллер на этот контроллер (который Ajax запрос обрабатывает) и выполните нужны вам код, тоже самое, что делаете для карточки товара.



Просто при выборе опций шаблоны обновляются другим контроллером, допишите его и верните нужные данные в smarty.

Даниил, в том-то все и дело, что [color=#282828][font=arial, verdana, tahoma, sans-serif]$runtime.controller и $runtime.mode [/font][/color][color=#282828][font=arial, verdana, tahoma, sans-serif]выдают сразу при загрузке (обновлении) страницы следующее:[/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif]$runtime.controller = products[/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif]$runtime.mode = view[/font][/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]когда я выбираю опцию, то[/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif]$runtime.controller = products[/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif]$runtime.mode = options[/font][/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]контроллер не меняется ведь. А так у меня уже написан post контроллер для контроллера products. Именно в этом post контроллере и рассчитываются переменные для режима view, которые в нем же и выдаются в смарти. Пробовал в своем post контроллере ставить проверку на условие view == 'options' - результата нет. [/font][/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]Из-за того, что нет результата и что [/font][/color][color=#282828][font=arial, verdana, tahoma, sans-serif]$runtime.controller остается равным products при выборе опции, я и сделал вывод, что при выборе опции контроллер products не исполняется заново. [/font][/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]Или я туплю по-страшному? Неужели при отображении карточки товара и изменении опции у товара работают разные контроллеры? Как тогда узнать какой работает при смене опции?[/font][/color]

[quote name='densvi' timestamp='1428785636' post='211102']

[color=#282828][font=arial, verdana, tahoma, sans-serif]Или я туплю по-страшному? Неужели при отображении карточки товара и изменении опции у товара работают разные контроллеры? Как тогда узнать какой работает при смене опции?[/font][/color]

[/quote]



Отображение карточки выполняется

products.view



А обновление опций

products.options



Всё нормально.



Отображение это GET , а пересчёт опций это Ajax запрос POST на другой мод.



Когда вы добавляете товар в корзину, запрос куда улетает? Страница остаётся прежней и обновляются блоки.



Смотрите видео, про как работает Ajax.

Даниил, смотрел я видео про ajax раза 4 уже. Но не нашел информации, которая помогла бы мне. Сорри, за мою тормознутость конечно. Но я так и не понял, как мне получить мои переменные при смене опций

[quote name=‘densvi’ timestamp=‘1428905474’ post=‘211197’]

Даниил, смотрел я видео про ajax раза 4 уже. Но не нашел информации, которая помогла бы мне. Сорри, за мою тормознутость конечно. Но я так и не понял, как мне получить мои переменные при смене опций

[/quote]



У вас уже products.post.php в котором вы получаете нужные данные для карточки товара (мод view)



Ajax запрос отправляется постом на мод options .



Сделайте в своём пост контроллере секцию для мода “options” и в ней получите и выведите нужную информацию.

Даниил, в том-то все и дело, что я с самого начала так и делал, но не работает. Вот что у меня в пост. контроллере:


<br /> use Tygh\Registry;<br /> if (!defined(&#39;BOOTSTRAP&#39;)) { die(&#39;Access denied&#39;); }<br /> if ($mode == &#39;view&#39;) {<br /> тут код для расчета переменных<br /> }<br /> <br /> if ($mode == &#39;options&#39;) {<br /> тут точно такой же код для расчета переменных<br /> }<br />



Когда карточка только открывается, то переменные рассчитываются, т.е. срабатывает условие по моду = view, но когда идет изменение опций у товара, то условие по моду = options не срабытывает