Jump to content

Почти решение проблемы с бесплатной доставкой


Recommended Posts

Нашёл простое решение проблемы, как добавить бесплатную доставку к товару. Просто, добавляем нового производителя в 'Manufacturers', скажем, 'OPs' (Own Products). Далее, добавляем курьера в 'Carriers'. Пусть это будет 'Free Shipper'. Делаем для него таблицу расценок, в которой доставка в любую страну стоит 00.00. Для того и другого загружаем один и тот же графический логотип с надписью 'Free shipping', который будут появляться на странице товара как логотип производителя, а при оформлении заказа, на шаге доставки, в качестве логотипа курьера. В соответствующем php-файле делаем запись, смысл которой -- "если произдводитель 'OPs', то курьер по умолчанию -- 'Free Shipper'. После этого достаточно будет у товара, продаваемого с бесплатной доставкой, прописать производителя 'OPs' и всё. Счёт за доставку автоматически будет выставляться '00.00'. Хорошо бы знать ещё, как на языке php грамотную запись сделать! Я им не владею, увы...

Link to comment
Share on other sites

Можно создать купон на бесплатную доставку, в его свойствах указать определенную категорию и написать его код в описании товара.

Link to comment
Share on other sites

Пробовал. Ничего не получилось. Потом до меня дошло, что и не должно было получиться, потому что купон не может принадлежать товару, его можно, только, вручить покупателю. И не всем, а кому-то. А товар "фри шиппинг" должен быть доступным любому покупателю. Вы сами попробуйте, может у Вас что-то получится. Я мог где-то и ошибиться.

А чем Вам не нравится моя? Её реализация для человека, владеющего языком php, -- сущий пустяк!

Link to comment
Share on other sites

Один купон можно вручить многим покупателям. А код купона указать в описании товара. И действие купона можно привязать к товару в определенной категории.

Реализация не нравится тем, что нужно модифицировать движек.

Можно попробовать вставить в classes\Cart.php вставить то, что между //fix находится:

   function getOrderShippingCost($id_carrier = NULL, $useTax = true)
   {
       global $defaultCountry;

       if ($this->isVirtualCart())
           return 0;

       // Checking discounts in cart
       $products = $this->getProducts();
//fix
       $free_shipping = true;
//Вместо 666 вставить категорию с бесплатной доставкой!
       $cat= new Category(666);
//Получаем товары из этой категории
       $prog=$cat->getProducts(intval($params['cookie']->id_lang), 0, 1000);
       foreach($products AS $incatr)
       {
           foreach($prog AS $freeship)
           {
//Если хоть один товар в корзине не совпадает с товаром из категории с бесплатной доставкой
               if ($incatr['id_product']!=$freeship['id_product']){
//Не будет покупателю халявы и расчет доставки пойдет по обычному алгоритму
                   $free_shipping = false;
                   break 2;
               }
           }
       }
//Иначе стоимость доставки - 0
       if ($free_shipping) return 0;
//fix
       $discounts = $this->getDiscounts(true);

Link to comment
Share on other sites

Вы говорите всё, что между первым и последним //fix и включая, как я понимаю, эти фиксы?
Но меня смущает то, что цветом у Вас немного больший кусок выделен!..
До первого //fix есть ещё эти строчки:

 // Checking discounts in cart
       $products = $this->getProducts();



И ещё, вот, тут:
//Получаем товары из этой категории
$prog=$cat->getProducts(intval($params['cookie']->id_lang), 0, 1000);
 foreach($products AS $incatr)



и тут:
//Если хоть один товар в корзине не совпадает с товаром из категории с бесплатной доставкой
  if ($incatr['id_product']!=$freeship['id_product'])



написано '$incatr'. Это не опечатка? Не подразумевалось '$incart' -- 'в корзине'?

А то, что Вы так трепетно относитесь к движку, меня удивляет. Все только тем и занимаются,
что его без конца переделывают. Говорят же, нет предела совершенству.
Link to comment
Share on other sites

Цветом выделены комментарии. Показан больший участок кода, чтобы сориентироваться куда вставить фикс.
$incatr это опечатка, но она сделана 2 раза, так что не вызовет ошибки.

Движек обновлять нужно, а когда в нем куча фиксов, это сделать труднее.

Link to comment
Share on other sites

Не представляю себе, как бы я мог, пратически, раздавать купоны. И кому? Приходит в моё отсутствие новый клиент -- Вы, думаю, догадываетесь, что круглосуточно я их караулить не буду -- оглядывается по сторонам, ничего бесплатного не находит, вздыхает и уходит. Может быть, навсегда! Ну, а я, спустя какое-то время, возвращаюсь, узнаю о том, что без меня тут побыли гости, рву волосы на голове, потом трачусь на психоаналитика и косметологов.... Нет, пожалуй, обойдусь без психоаналитика... Но вернуть себе утраченную красоту!.. Без этого -- никак! Короче, сплошные расходы. Я же предлагаю сделать добавление бесплатной доставки чем-то вроде добавления свойства в описании товара. Один клик по нужному производителю в выпадающем списке и всё! И уже на странице товара и в общем каталоге будет красоваться логотип "Free shipping", а на странице оформления заказа за доставку будет выставлено "00.00". Разве плохо! Никаких больше заморочек!

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

И с этим курьером так всё просто! У него тоже есть своя таблица расценок на перевозки во все концы света. Только цены в каждой ячейке таблицы -- 00.00.

А Ваш код тоже интересно попробовать, что он даёт. Сейчас буду ставить.

Link to comment
Share on other sites

Создаете купон с кодом FREESHIP, действием для большого числа покупателей на категорию с бесплатной доставкой и добавляете его в описание товара. Покупатель сам его вводит и получает, что нужно.

//Вместо 666 вставить категорию с бесплатной доставкой!
$cat= new Category(666);

Тут вставили идентификатор своей категории?

Link to comment
Share on other sites

Это проглядел! На место 666 могу вписать Free shipping? И ещё вопрос, эта запись в каком-нибудь из разделов перевода отбражается? Её нельзя будет перевести на другие языки? Или включать разные графические логотипы с этой надписью, в зависимости от того, какой язык включен?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Я этот числовой идентификатор должен придумать или... Что-то я не совсем понимаю. Кажется мне, что Ваше решение не более сложное, чем то, которое предлагал я, но незнание php (начал, ведь, его изучать!) очень мешает. Пойду спать. Говорят, утро вечера медренее. Извините, что не могу, прямо, сейчас закончить с Вами этот разговор. На этой неделе уже третью ночь спать не ложился. С ума сошёл с этим магазином. До завтра!

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

Link to comment
Share on other sites

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

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

Короче, я ввёл категорию "Бесплатная доставка" в магазине и прописал её в купоне как дополнительную. Из своей основной категории товар, стественно, удаляться не должен. Потом, когда товаров будет много, его будет невозможно найти. Теперь при загрузке нового товара достаточно, лишь, кроме его основной категории указать эту дополнительную, и товар при оформлении уже обсчитывается как бесплатный. Но для этого на странице товара, а для тех, кто этого не заметил, и в корзине нужно добавить запись "Для бесплатной доставки в поле купона нужно ввести код 00.00". При добавлении купона Вы сами придумываете для него код, который Ваши покупатели потом вводят в специальное поле в корзине. Я выбрал код 00.00. Сам за себя говорит.

Другое неудобство. В настройках купона необходимо обозначить, на сколько покупок он предназначен. Я, недолго думая, поставил миллион, чтобы уже не возвращаться к этому вопросу. Оформление заказа у клиента на этом шаге застряло. Сам магазин не пропускает. Он, словно, говорит мне: "Да ты что, хозяин! Обанкротить нас хочешь!? Миллион бесплатных доставок! Да, только, через мой труп!" Побробовал число поменьше -- не проходит. 10000 -- тоже нет. Короче, и на сто не соглашается. Я догадался не прыгать на следующий поряд, а убрать единичку. 99-то уже двухзначное число! На него -- согласился, наконец. Совокупное число, на всех покупателей, я поставил 10000. Прошло. А сколь большим оно будет на самом деле, я пока не экспериментировал. Повторяю, это я делаю, чтобы уже не вспоминать об этом купоне и его обновлениях никогда.

Последнее, и самое неприятное, неудобство. Представте себе, посылка -- полкило. Место назначение -- другой конец Света. И везёт на другой конец Света Ваш курьер по умолчанию, скажем EMS,... бесплатно! Он же такой добрый! Можно было бы предложить покупателю, кроме ввода кода, выбрать ещё и курьера, Вашего собственного, но в корзине ПрестаШопа нет такой опции. Ещё лучше было бы при добавлении товара связывать его с другим курьером, но там тоже нет такой возможности. Не знаю пока, как решить эту проблему.

Link to comment
Share on other sites

Только что внёс очень существенное уточнение в текс. Без него будет непонятно. Я забыл написать, что дополнительная категория должна называться "Бесплатная доставка".

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...