Elina 0 Опубликовано 8 июня, 2013 Жалоба Share Опубликовано 8 июня, 2013 Можно ли это реализовать в каком-то стандартном модуле доставке в котором стоимость расчитывается в зависимости от веса и от выбранной страны? Или же может надо вставить код где-то до выдова модулей доставки. Если лучше так, то, плиз, подскажите куда. Нам необходимо давать эту доставку с учетом общей стоимости заказа. При чем мы хотим чтобы это был диапазон, например, если заказ больше 50$ но меньше 150$. Если заказ не вошел в указанный диапазон, то вообще не предлагать эту доставку. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 8 июня, 2013 Жалоба Share Опубликовано 8 июня, 2013 Стандартные модули доставки table, zones Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 8 июня, 2013 Автор Жалоба Share Опубликовано 8 июня, 2013 Мы давно используем модули доставки. Нам не хватает там функционала потому что нам нужно не только дать цену доставки в зависимости от зоны и веса, но и учесть общую стоимость заказа (одновременно!). Функциональностью задачи этого не сделать, мы уже смотрели. Поэтому я и спрашиваю: где в задаче находится код в котором формируется динамический массив с информацией о методах доставки, которые будут предложены для данного заказа? Если я правильно понимаю, то если в этом месте внутри данного цикла можно поставить if с условием в котором мы зададим диапазон который нам нужно исключить из рассмотрения для данного вида доставки, то этого будет вполне достаточно чтобы сделать то что мы хотим. Если из логических 2-х условий "и" хоть одно не выполнится, нам просто не надо вносить этот вид доставки в формирующийся массив. Т.е. можно обойтись без глобальной переделки модуля доставки. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 8 июня, 2013 Жалоба Share Опубликовано 8 июня, 2013 Ну может вот этот совет из faq поможет - http://vamshop.ru/forum/topic/8422-%D0%BA%D0%B0%D0%BA-%D0%BD%D0%B5-%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%82%D1%8C-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B-%D0%B2-%D0%B7%D0%B0%D0%B2%D0%B8/?hl=%2B%D0%BD%D0%B5+%2B%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%82%D1%8C http://vamshop.ru/forum/topic/8421-%D0%BA%D0%B0%D0%BA-%D0%BD%D0%B5-%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%82%D1%8C-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B-%D0%B2-%D0%B7%D0%B0%D0%B2%D0%B8/?hl=%2B%D0%BD%D0%B5+%2B%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%82%D1%8C Если стандартными не получится средствами, тогда только свой код писать. Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 8 июня, 2013 Автор Жалоба Share Опубликовано 8 июня, 2013 Да не, получилось, Thanks! Единственное что осталось - если получается в итоге нулевая доставка, то строка все равно высвечивается. И народ ее выбирает само собой :) Хочу выкинуть ее из списка, пишу в приверку: if ($shipping == -1) { $shipping_cost = 0; $shipping_method = MODULE_SHIPPING_IPAGL_UNDEFINED_RATE; $this->enabled = false; /////////////////////////////////// } else { Но ничего не выходит. Что не так? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 9 июня, 2013 Жалоба Share Опубликовано 9 июня, 2013 Видимо, условие неправильное. Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 9 июня, 2013 Автор Жалоба Share Опубликовано 9 июня, 2013 Срабатывает именно это место. Потому что когда я меняю здесь: $shipping_cost = 100; То светится не ноль а 100 на экране. Кстати, какой смысл в том чтобы писать сообщение 'вам не подходит этот вид доставики', что и формируется в этом блоке, а не просто выкинуть строку из списка? Ведь если не подходит, то логичнее просто не писать нечего и не светить. А так мы светим строку с нулем и чекбоксом (!) что позволяет людям выбрать бесплатную доставку. При чем, мы сами им даем возможность такого выбора. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 9 июня, 2013 Жалоба Share Опубликовано 9 июня, 2013 У Вас странное какое-то условие, что за: if ($shipping == -1) { $shipping переменная где определена?! Почему -1 ? Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 9 июня, 2013 Автор Жалоба Share Опубликовано 9 июня, 2013 Не у меня, я код если и вставляю то эпизодически при чем тот что вы мне говорите. Ну разве что больше меньше могу под себя подправить Это в zones, там же я вижу присвоение -1 чуть выше. Если ошибка не нарисуется, то присвоится -1. Ну и т.д. Я без отладчика тут сама буду до скончания века ковыряться, поэтому просто спрашиваю. function quote($method = '') { global $order, $shipping_weight; $dest_country = $order->delivery['country']['iso_code_2']; $dest_zone = 0; $error = false; for ($i=1; $i<=$this->num_zones; $i++) { $countries_table = constant('MODULE_SHIPPING_IPA_COUNTRIES_' . $i); $country_zones = split("[,]", $countries_table); if (in_array($dest_country, $country_zones)) { $dest_zone = $i; break; } } if ($dest_zone == 0) { $error = true; } else { $shipping = -1; $zones_cost = constant('MODULE_SHIPPING_IPA_COST_' . $dest_zone); $zones_table = split("[:,]" , $zones_cost); $size = sizeof($zones_table); for ($i=0; $i<$size; $i+=2) { if ($shipping_weight <= $zones_table[$i]) { $shipping = $zones_table[$i+1]; $shipping_method = MODULE_SHIPPING_IPA_TEXT_WAY . ' ' . $dest_country . ' : ' . $shipping_weight . ' ' . MODULE_SHIPPING_IPA_TEXT_UNITS; break; } } if ($shipping == -1) { $shipping_cost = 0; $shipping_method = MODULE_SHIPPING_IPA_UNDEFINED_RATE; } else { $shipping_cost = ($shipping + constant('MODULE_SHIPPING_IPA_HANDLING_' . $dest_zone)); } } $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_IPA_TEXT_TITLE, 'methods' => array(array('id' => $this->code, 'title' => $shipping_method, 'cost' => $shipping_cost))); if ($this->tax_class > 0) { $this->quotes['tax'] = vam_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']); } if (vam_not_null($this->icon)) $this->quotes['icon'] = vam_image($this->icon, $this->title); if ($error == true) $this->quotes['error'] = MODULE_SHIPPING_IPA_INVALID_ZONE; return $this->quotes; } Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 10 июня, 2013 Жалоба Share Опубликовано 10 июня, 2013 Я так особо и не понял, что Вы хотите. Если в стандартных модулях нет нужного функционала, то в любом случае, только свой код писать. Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 11 июня, 2013 Автор Жалоба Share Опубликовано 11 июня, 2013 Можно ведь взять стандартный модуль и переделать, правильно? Этим мы и занимаемся. Вы спросили откуда -1 - я вам ответила, это как раз часть стандартного кода, это не наш присвоитель. Но вот в этот фрагмент мы вставляем свою строчку $this->enabled = false; if ($shipping == -1) { $shipping_cost = 0; $shipping_method = MODULE_SHIPPING_IPAGL_UNDEFINED_RATE; $this->enabled = false; /////////////////////////////////// } else { И вопрос в следующем: почему при этом строка таки высвечивается в списке предлагаемых доставок? Мы же ее этим флагом как раз выключаем. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 11 июня, 2013 Жалоба Share Опубликовано 11 июня, 2013 Если Вы код в другое место ставите, может там ещё переменная не определена и не выполняется условие. Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 17 июня, 2013 Автор Жалоба Share Опубликовано 17 июня, 2013 Если Вы код в другое место ставите, может там ещё переменная не определена и не выполняется условие. Александр, у вас практически тот же модуль. Вы сами попробуйте. Я же писала, что ставила контрольную печать. Я делала пресвоитель shipping_cost = 100. И на экране у меня светился не 0, а эта самая 100. Т.е. условие выполнялось, но $this->enabled = false; не давал мне того эффекта, на который я расчитывала. А именно: я не хочу чтобы в списке выбора доставок светилась доставка с нулевой ценой даже если рядом с ней написано, что ее выбирать не нужно. Вопрос остается тот же: какая у вас была причина делать подобный присвоитель? Ведь в итоге покупатель выбирает нулевую доставку, видимо думаю что раз уже есть возможность, то чего не воспользоваться? Может и пропустят. Но хозяева магазина потом вынуждены вступать в длительную переписку и объяснять что не надо было делать этот выбор. Ваш стандартный модуль zones делает ведь то же самое в этой ситуации. Или у вас тоже возникла аналогичная проблема и вы обошли ее таким образом? Просто другого объяснения я не нахожу, строку надо просто не светить, и это важно не только нам, это в принципе более корректная обработка данной ситуации и для стандартного модуля. if ($shipping == -1) { $shipping_cost = 100; $shipping_method = MODULE_SHIPPING_IPAGL_UNDEFINED_RATE; $this->enabled = false; /////////////////////////////////// } else { Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 17 июня, 2013 Жалоба Share Опубликовано 17 июня, 2013 Стандартные модули вряд ли будут меняться по умолчанию. Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 17 июня, 2013 Автор Жалоба Share Опубликовано 17 июня, 2013 До сегодняшнего дня я думала, что это здешняя (канадская и штатовская) болезнь, когда человек боится сказать фразу "я не знаю ответа на ваш вопрос", а просто начинает всячески пытаться от него уйти. Не знаете, не ваш код - так и скажите "не знаю, не писал, не проверял". Но просто обратите внимание на то, что в вашем стандартном модуле возможно возникновение такой нехорошей ситуации, которую в будущем лучше все-таки исправить, раз уж вы этот код используете. Если стоит IF то когда-то он срабатывает, иначе нет смысла его ставить. И вот когда он срабатывает я вам описала что происходит. Это плохо обработанная ситуация, я вам ответственно заявляю т.к. сама в прошлом работала финансовым программистом. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 18 июня, 2013 Жалоба Share Опубликовано 18 июня, 2013 Вы забыли в конце добавить imho Ссылка на сообщение Поделиться на другие сайты
Elina 0 Опубликовано 19 июня, 2013 Автор Жалоба Share Опубликовано 19 июня, 2013 Ну это само собой, все, что человек пишет, это всегда IMHO. Но вы имеете сейчас мнение пользователя, который когда-то был довольно неплохим постановщиком задач. И в свое время я хорошо усвоила, что писать так, как удобно мне это в корне не правильно. Должно быть удобно прежде всего пользователю. Так вот, ни одному пользователю вашего магазина не может быть удобно, если вы выводите в предлагаемом клиенту списке доставку с нулевой ценой. Даже если вы сделали там заплатку с надписью говорящей о том, что выбирать эту доставку не стоит. Покупатель выберет именно эту доставку, не сомневайтесь. Всегда лучше программно обработать то, что можно автоматизировать, именно так меня в свое время учили. Есть вещи, которые не стоит обрабатывать, а есть вещи, которые не обработать признак плохого стиля в постановке. Вот тут как раз такая ситуация. Я знаю, что задачи, которые давно используются и уже не переписываются просто имеют сопроводительный список с перечисленными известными ошибками, как у нас говорили "это не бага, это фича". Но к данной ситуации это никак не относится потому что задача все еще дописывается и переписывается. Вот когда вы перестанете выпускать обновления, тогда вы тоже сможете это указать как особенность работы системы. Я с большим уважением отношусь ко всему что вы делаете, но эта "особенность" вашей системы может быть причиной убытков ваших клиентов, поэтому я бы очень хотела, чтобы вы все-таки ее исправили в будущих версиях. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 19 июня, 2013 Жалоба Share Опубликовано 19 июня, 2013 Лично я не вижу ошибки в том коде, что Вы приводили. :dad: Я лишь вижу то, что Вам не подходят стандартные модули доставки, в таких ситуациях обычно пишут своё решение, которое подойдёт именно Вам под Ваши же требования. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения