Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Engineer

Користувачі
  • Публікації

    69
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем Engineer

  1. Новый форум - это нечто. Полностью сожрало разметку. Попробую повторить. Правильно поняли, что "что-то не так" $json['total'] - это не число товаров в корзине, а уже отформатированная строка ответа " Икс товаров на Игрек тугриков". Число товаров в корзине - это $this->cart->countProducts(), код который вам нужен должен выглядеть где-то так Например: if($this->cart->countProducts() == 0) $json['total'] = ... if($this->cart->countProducts() == 1) $json['total'] = ... Обратите внимание, сравнение в php не =  (как у вас в коде - это присвоить значение), а == $data['text_items'] - это, тащем-та, тот самый шаблон, вида "%s товаров - %s денег". Он вообще не для правки в коде :) На вашем месте я бы вообще определил в языковом файле language/(язык)/checkout/cart.php несколько текстов для разных вариантов вида: $_['text_items1'] = "%s товаров - %s денежных единиц. Немного подкреплюсь" и использовал бы их.if($this->cart->countProducts() == 1) $json['total'] = sprintf($this->language->get('text_items1'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); Что делает код: если число товаров в корзине равно единице, то в заполняет места в шаблоне (первый аргумент функции sprintf, до первой запятой) для подстановки ( %s ) параметрами. Первый - от первой до второй запятой в функции sprintf (второй аргумент) считает число товаров и купонов, второй - после второй запятой (третий аргумент), сумма. Если не нужен вывод числа товаров, суммы - правите шаблоны и убираете из sprintf ненужные параметры.

  2. Правильно поняли, что "что-то не так" $json['total'] - это не число товаров в корзине, а уже отформатированная строка ответа " Икс товаров на Игрек тугриков". Число товаров в корзине - это $this->cart->countProducts(), код который вам нужен должен выглядеть где-то так. if($this->cart->countProducts() == 0) $json['total'] = ... if($this->cart->countProducts() == 1) $json['total'] = ... Обратите внимание, сравнение в php не =  (как у вас в коде - это присвоить значение), а == $data['text_items'] - это, тащем-та, тот самый шаблон, вида "%s товаров - %s денег". Он вообще не для правки в коде :) На вашем месте я бы вообще определил в языковом файле language/(язык)/checkout/cart.php несколько текстов для разных вариантов: $_['text_items1'] = "%s товаров - %s денежных единиц. Немного подкреплюсь" и использовал бы их. Например:if($this->cart->countProducts() == 1) $json['total'] = sprintf($this->language->get('text_items1'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); Что делает этот код: если число товаров в корзине равно единице, то в заполняет места в шаблоне (первый аргумент функции sprintf, до первой запятой) для подстановки ( %s ) параметрами. Первый - от первой до второй запятой в функции sprintf (второй аргумент) считает число товаров и купонов, второй - после второй запятой (третий аргумент), сумма. Если не нужен вывод числа товаров, суммы - правите шаблоны и убираете из sprintf ненужные параметры.

    • +1 1
  3. Цитата

     

    Блин, парни, откуда такая любовь удалять гланды через задний проход?

    Чуть теории.

    Манипуляции с содержимым виджета корзины происходят с помощью функций add и remove контроллера catalog/controller/checkout/cart.php.
    Если "не сложилось", например попытались добавить товар без обязательной опции, в ответе будет json['redirect'] на страницу товара.
    Если все хорошо, в ответе json будет поле total, которое скрипт на странице подхватывает и вставляет как текст в виджет корзины.
     

    $json['total'] = ....

    это оно.

    По умолчанию, "из коробки" вывод формируется в виде "{количество} товаров - {сумма}", независимо от количества товаров и суммы, даже нулевого.
    Если хочется, чтобы в зависимости от количества выводились разные надписи, то вместо коробочного единого текста делаете if или switch по

    $this->cart->countProducts()

    (это функция подсчета числа товаров в корзине) и там уже по вариантам количества ( ноль, не ноль, другие цифры) делаете свой вывод.
    В итоге вместо дефолтного присваивания у вас будет конструкция вида:
    Если А $json['total'] = ...
    Если B $json['total'] = ....
    и т.д.

    Можно добавить в языковый файл корзины разных текстов и их использовать для таких случаев.

    Вышеизложенное для опенкарта из коробки. Если стоит тема и что-то правит по-своему, надо разбирать ее и править по тому же принципу

    • +1 1
  4. 8 минут назад, malkovan сказал:

    Ясно.

    В одной категории будет, на сегодняшний момент, 40-70 товаров.

    Это не критичное кол-во? Потому как одним из приоритетов конечно является скорость работы.

    И сколько допустим не критично в принципе, до ста?

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

    Не должно быть критично.


    А вообще, для опорных цифр, ориентиров, сделайте копию магазина, соберите все товары в одну категорию и в файле catalog/model/catalog/product.php сделайте маленькую правку:
    1. найдите функцию getProducts

    2. и строчку в ней, где задаются лимиты на вывод

    Цитата

                $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];

     

    закомментируйте ее и вместо нее пробуйте $sql .= " LIMIT 0,100" 200,300...1000, 5000, 10000 и т.п.
    Открывайте ту категорию, куда все собрали, и смотрите, как быстро выводит. Тк скзать, научным тыком определите, когда ваш магазин на вашем хостинге в ваших условиях начнет захлебываться.

  5. Скорее всего этим вы просто убьете магазин.

    В опенкарте есть одна особенность реализации получения списка товаров : после предварительного запроса для получения списка товаров подходящих по условиям(категория и т.д.) для каждого(!) товара из этого списка потом вызывается функция с отдельным sql-запросом к БД.

    Из-за этого стандартные  20-50 товаров на странице еще не так болезненно, но если в категории сотни товаров и вы захотите получить все сразу, то получите бешеную нагрузку на сервер сзади и тормоза на выходе спереди. Если товаров еще больше, то "стремительным домкратом" растут шансы на то, что вывода вообще не будет. Сервер просто убьет по таймауту php скрипт, пока тот дожидается ответа от БД.

     

    Если же вывод всех товаров так критичен, что просто жить без этого никак, надо в первую очередь переписывать модель( и возможно оптимизировать под вас).

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


     

  6. Вывод задается в шаблоне:
    catalog/view/theme/default/template/product/category.tpl

    Если тема не дефолтная, соответственно меняется путь.

     

    Там ищете $description - переменная в которой описание категории, будет выглядеть как-то так.

     

          <?php if ($thumb || $description) { ?>
          <div class="row">
            <?php if ($thumb) { ?>
            <div class="col-sm-2"><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" title="<?php echo $heading_title; ?>" class="img-thumbnail" /></div>
            <?php } ?>
            <?php if ($description) { ?>
            <div class="col-sm-10"><?php echo $description; ?></div>
            <?php } ?>
          </div>
          <hr>
          <?php } ?>

    Смысл фрагмента: если есть картинка для категории $thumb или описание $description - вывести их.
    Смотрите по разметке, куда его вам хочется перенести - переносите код туда, и вуаля!

  7. Да да, куда не плюнь, так везде в шаговой доступности открывают не кафешки для детишек а "Убыточные аптеки"  это коммерсанты таким образом заботятся о нашем здоровье и тратят собтсвенные деньги на поддержание здоровья нации .   Я то же  такое где -то слышал .  :ugeek:

    У меня знакомая из РФ, из Е-бурга влетела на Гепатит С. Пренеприятнейшая дрянь. Ну и по ходу лечения начала узнавать цены. Софосбувир(кажется) стоил чуть ли не на порядок дороже ( раз в 6-7) чем дженерик из Индии. Та же формула, то же действующее вещество, просто без раскрутки, рекламы, бренда, лейбла и т.п.

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

    Вот на этой накрутке в 6-7 раз и можно проводить семинары для врачей, приплачивать дилерские аптекам и прочее. Нужен только лох, который будет за все это платить.

    А тему принудительного лицензирования, как в Индии, когда изобретателю платят фиксированный процент от сбыта и делают у себя, почему и выходит в разы дешевле,  прикрыли, что в России, что в Украине - "снижает инвестиционную привлекательность".

    Такие дела.

     

  8. скорее всего сфинкса будет недостаточно.

     

    посмотрите как устроен поиск на разных сайтах данной тематики.

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

     

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

     

    Да. Я правда не на сайтах обращал внимание на это, а в самих аптеках. В рецепте одно, но всегда могут предложить такое же лекарство, с таким же действующим веществом, но от другого производителя под другим названием и с другой ценой.

    В общем, кто-то (и я полагаю этот кто-то -  заказчик) должен предоставить список аналогов, из которого можно сделать таблицу и следить за ее наполнением. Тогда и поиск можно делать умно и быстро.

  9. Как мне кажется, если нет формализации критериев и процедуры, как подбирать аналоги, сфинкс не поможет.
    А если она есть, то это решается добавлением пары полей/таблиц с продуманной индексацией, подпиливанием поиска и аж шуршит все.

  10. А какие еще опции используются для штор(товара)? Цвет, что-то с материалом, или размер высота х ширина единственная?
     

    И размеры полотен исходных материала общие, или для разных материалов могут отличаться? Ну например, в одном случае 1,5м, в другом два, и от этого будет меняться формула расчета цены?

  11. Improved cache


    Improved cache


    Для работы модуля требуется vqmod, копируем файл в каталог xml и машем крылышками.

    Стандартное время жизни кэша данных в опенкарт - 1 час.

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

    Как использовать после установки?

    Например, в файле моделей для производителей ищем строчку

        	 $this->cache->set('manufacturer.' . (int)$this->config->get('config_store_id'), $manufacturer_data);

    и правим на

               	 $this->cache->set('manufacturer.' . (int)$this->config->get('config_store_id'), $manufacturer_data, 24);

    передавая дополнительный параметр 24, теперь данные будут жить 24 часа.

    Для других моделей, использующих кэш, аналогично.

    Изменение обратно совместимо, для вызовов, которые не используют данную возможность, не передают новый параметр, в ядре подставляется значение по умолчанию "1", и данные будут жить стандартный час (3600 секунд)

    Версии 1.5.5* 1.5.6.*


     

  12. думаете добавив дополнительные поля в шаблоне может создать дополнительную вкладку? 

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

    Что выведете в контейнер, то и будет во вкладке.

  13. Артикул товара в заказе в непиленой базе не сохраняется.

    Вам надо :
    1. Добавить поле для артикула в таблицу [oc_]order_product,
    2. Сохранять его туда (поправить функцию  addOrder в catalog/model/checkout/order.php )

    3. Поправить то место, где ее вызывают (если не подводит память catalog/controller/checkout/confirm.php или что-то вроде того), чтобы дать в п.2. этот sku

    4. Вернуться к файлу модели из п.2. и посмотреть функцию confirm (там идет отправка писем), чтобы скомпоновать письмо по вкусу со sku ))


×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.