Перейти к содержанию
Официальный форум поддержки Simpla

Выборочная бесплатная доставка


Перейти к решению Решено trainracing,

Рекомендуемые сообщения

Добавим запрос в бд

ALTER TABLE `s_products` ADD `free_delivery` TINYINT( 0 ) NOT NULL AFTER `featured`;
UPDATE `s_products` SET `free_delivery` = 0;

Дальше идем в /simpla/ProductAdmin.php ищем строку 26
$product->visible = $this->request->post('visible', 'boolean');

и после вставляем:
$product->free_delivery = $this->request->post('free_delivery', 'boolean');

Теперь добавим галочку в шаблоне simpla/design/html/product.tpl после строк (485)  ищем
<div class="checkbox">
<input name=featured value="1" type="checkbox" id="featured_checkbox" {if $product->featured}checked{/if}/> <label for="featured_checkbox">Хит</label>
</div>

 
 ниже добавим:
<div class="checkbox">
<input name=free_delivery value="1" type="checkbox" id="free_delivery_checkbox" {if $product->free_delivery}checked{/if}/> <label for="free_delivery_checkbox">Беспл. Досавка</label>
</div>

далее в api/products.php ищем
p.visible, 

и после вставляем:
p.free_delivery,

аналогично в строках 252 этого файла
 
потом в simpla/ProductsAdmin.php ищем
case 'unset_featured':
{
$this->products->update_product($ids, array('featured'=>0));
break;
}

и ниже вставляем
case 'set_delivery':
{
$this->products->update_product($ids, array('free_delivery'=>1));
break;
}
case 'unset_delivery':
{
$this->products->update_product($ids, array('free_delivery'=>0));
break;
}


потом в шаблоне simpla/design/html/products.tpl после строки (120) ищем

{if $product->featured}featured{/if} 

 
 и после добавим 
{if $product->free_delivery}delivery{/if}

Далее ищем (102 строка)[/size]
<a class="featured" title="Рекомендуемый" href="#"></a>

и ниже вставим:
<a class="delivery" title="Бесплатная доставка" href="#">Б</a>

потом Перед строкой (459) добавим:
// Бесплатная доставка
$("a.delivery").click(function() {
var icon = $(this);
var line = icon.closest("div.row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('delivery')?0:1;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'product', 'id': id, 'values': {'free_delivery': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.addClass('delivery');
else
line.removeClass('delivery');
},
dataType: 'json'
});
return false;
});

 

simpla/design/css/style.css и после851 строки ищем 

.icons a.restore                { background-image: url(../images/clock_history_frame.png); }

и ниже добавим:

.icons a.delivery                { padding: 2px;
  color: #D7D7B0;
  font-weight: bold;
  text-decoration: none;
  font-size: 18px; }
.delivery .icons a.delivery       { color: #EB7A06; }

В строке 670 поменяем длину поля имени с 505px на 485px.

 

в шаблоне вашего дизайна в удобном месте добавьте 

{foreach $product as $p}
{if $p->free_delivery == 1} 
<div>  Доставка бесплатно</div>
{/if}

  {else} <div>Доставка 300руб </div>{/if}
    </span> 
  {/foreach}   

 

Ссылка на сообщение
Поделиться на другие сайты

Как сказал товарищ Огурцов в одном известном фильме, "Работа проделана большая. Так дело не пойдет."

 

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

Изменено пользователем Kors
Ссылка на сообщение
Поделиться на другие сайты

Тоже не понял что к чему и для чего
 

{foreach $product as $p}
{if $p->free_delivery == 1} 
<div>  Доставка бесплатно</div>
{/if}

  {else} <div>Доставка 300руб </div>{/if}
    </span> 
  {/foreach}  
{/if}  {else} надо поправить наверное или так задумано?
Ссылка на сообщение
Поделиться на другие сайты

Видимо, надо просто посмотреть сайт ТС и понять что и зачем он для себя сделал.

Явно частный случай.

Ссылка на сообщение
Поделиться на другие сайты

Как сказал товарищ Огурцов в одном известном фильме, "Работа проделана большая. Так дело не пойдет."

 

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

делалось для выборочной выгрузки стоимости доставки на маркет. Как везде я говорил - я не профи и не программист, но может кому пригодится Изменено пользователем trainracing
Ссылка на сообщение
Поделиться на другие сайты

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

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

А теперь посмотрите на свой начальный пост:

1. Там нет вообще никакого упоминания ни про какой маркет.

2. Там нет вообще никакого кода, связанного с выгрузкой на маркет.

3. Там есть лишь более-менее стандартное добавление в админке к товару поля чекбокс по образцу рекомендуемых.

4. Вы, как говорите - не профи. Для кого пишете?

4.1. Если для профи, то он и сам быстрее и лучше напишет такой код по готовому имеющемуся образцу.

4.2. Если для непрофи, то он сам нипочем не догадается, как и для чего Ваш код использовать (в теме уже три человека написали, что не догадались, причем все - не новички).

 

 

Если что-то пишете, надо стараться, чтоб было понятно. Хоть немного о читателе заботиться надо...

Ссылка на сообщение
Поделиться на другие сайты
  • Решение

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

ALTER TABLE `s_products` ADD `free_delivery` TINYINT( 0 ) NOT NULL AFTER `featured`;
UPDATE `s_products` SET `free_delivery` = 0;

Дальше идем в /simpla/ProductAdmin.php ищем строку 26


$product->visible = $this->request->post('visible', 'boolean');

и после вставляем

$product->free_delivery = $this->request->post('free_delivery', 'boolean');

Теперь добавим галочку в шаблоне simpla/design/html/product.tpl после строк (485)  ищем


<div class="checkbox">
<input name=featured value="1" type="checkbox" id="featured_checkbox" {if $product->featured}checked{/if}/> <label for="featured_checkbox">Хит</label>
</div>

ниже вставим 

<div class="checkbox">
<input name=free_delivery value="1" type="checkbox" id="free_delivery_checkbox" {if $product->free_delivery}checked{/if}/> <label for="free_delivery_checkbox">Беспл. Досавка</label>
</div>

далее в api/products.php ищем


p.visible,

и после вставляем

p.free_delivery,

аналогично в строках 252 этого же файла
 
потом в simpla/ProductsAdmin.php ищем


case 'unset_featured':
{
$this->products->update_product($ids, array('featured'=>0));
break;
}

и ниже вставляем


case 'set_delivery':
{
$this->products->update_product($ids, array('free_delivery'=>1));
break;
}
case 'unset_delivery':
{
$this->products->update_product($ids, array('free_delivery'=>0));
break;
}

потом в шаблоне simpla/design/html/products.tpl после строки (120) ищем


{if $product->featured}featured{/if}

после вставляем

{if $product->free_delivery}delivery{/if}

Далее ищем (102 строка)


<a class="featured" title="Рекомендуемый" href="#"></a>

и ниже добавим

<a class="delivery" title="Бесплатная доставка" href="#">Б</a>

потом Перед строкой (459) добавим:


// Бесплатная доставка
$("a.delivery").click(function() {
var icon = $(this);
var line = icon.closest("div.row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('delivery')?0:1;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'product', 'id': id, 'values': {'free_delivery': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.addClass('delivery');
else
line.removeClass('delivery');
},
dataType: 'json'
});
return false;
});

simpla/design/css/style.css и после851 строки ищем


.icons a.restore { background-image: url(../images/clock_history_frame.png); }

ниже добавим

.icons a.delivery { padding: 2px;
color: #D7D7B0;
font-weight: bold;
text-decoration: none;
font-size: 18px; }
.delivery .icons a.delivery { color: #EB7A06; }

В строке 670 поменяем длину поля имени с 505px на 485px.
 
в шаблоне карточки товара в удобном месте добавьте 


{if $product->free_delivery == 1} <div>Доставка бесплатно</div>
{else}

<span> 600 руб</span>

{/if}

В cart.tpl строку 190 заменим на:

{elseif $cart->total_price >= $delivery->free_from && $product->free_delivery == 1} 

 

 
Далее делаем выгрузку в маркет
в файле /yandex.php  ищем 

v.compare_price,

и после добавим

p.free_delivery AS product_free_delivery,

далее ищем 

$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);

и ниже добавим

if ($p->product_free_delivery == 1) {
$local_delivery_cost = '0';
}

else {
$local_delivery_cost = '600';
}

где 600 - это стоимость вашей доставки. как добавить туда $delivery->price и $delivery->free_from я не знаю, хоть пробовал по разному

 

 

далее в этом же файле ищем

print "<price>".$price."</price>";

и ниже добавим

if ($p->free_delivery)
print "<local_delivery_cost>".$local_delivery_cost."</local_delivery_cost>";

 

если надо чтоб выводил бесплатно при сумме товара свыше 60 тыс например то добавить такой код:

 

if ($p->product_free_delivery == 1) {
$local_delivery_cost = '0';
} 
else {	
if ($p->price > 60000) {
$local_delivery_cost = '0';
} 

else {
$local_delivery_cost = '600';
}
}
 

где 60000 это сумма после которой выводим бесплатную доставку, 600 - стоим. доставки

и после 

 

print "<price>".$price."</price>";
 

 

добавим 

 

if ($p->price)
 print "<local_delivery_cost>".$local_delivery_cost."</local_delivery_cost>";
if ($p->free_delivery)
 print "<local_delivery_cost>".$local_delivery_cost."</local_delivery_cost>";
 
Изменено пользователем trainracing
Ссылка на сообщение
Поделиться на другие сайты

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

А теперь посмотрите на свой начальный пост:

1. Там нет вообще никакого упоминания ни про какой маркет.

2. Там нет вообще никакого кода, связанного с выгрузкой на маркет.

3. Там есть лишь более-менее стандартное добавление в админке к товару поля чекбокс по образцу рекомендуемых.

4. Вы, как говорите - не профи. Для кого пишете?

4.1. Если для профи, то он и сам быстрее и лучше напишет такой код по готовому имеющемуся образцу.

4.2. Если для непрофи, то он сам нипочем не догадается, как и для чего Ваш код использовать (в теме уже три человека написали, что не догадались, причем все - не новички).

 

 

Если что-то пишете, надо стараться, чтоб было понятно. Хоть немного о читателе заботиться надо...

 

Дай идею как "активировать" в карточке товара и в yandex.php  переменные $delivery->price и $delivery->free_from

Ссылка на сообщение
Поделиться на другие сайты

А Вы сами это проверяли?

В последней части про изменения в yandex.php видны ошибки сразу.

Например:

1. $p->free_delivery всегда НЕ определено и будет обрабатываться как пустое.

2. А если п.1 исправить, тогда тег local_delivery_cost будет выводиться несколько раз подряд.

3. Код в значительной части дублируется непонятно зачем. Значение $local_delivery_cost считается в двух местах, и по-разному...

Ссылка на сообщение
Поделиться на другие сайты

Дай идею как "активировать" в карточке товара и в yandex.php  переменные $delivery->price и $delivery->free_from

Переменные не активируются, нет такой формы работы с ними...

Если хотите ЗАДАТЬ значения так переменных, то надо сначала понять, какое значение хотите.

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

 

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

Изменено пользователем Kors
Ссылка на сообщение
Поделиться на другие сайты

А Вы сами это проверяли?

В последней части про изменения в yandex.php видны ошибки сразу.

Например:

1. $p->free_delivery всегда НЕ определено и будет обрабатываться как пустое.

2. А если п.1 исправить, тогда тег local_delivery_cost будет выводиться несколько раз подряд.

3. Код в значительной части дублируется непонятно зачем. Значение $local_delivery_cost считается в двух местах, и по-разному...

Работоспособность проверил несколько раз, работает отлично. дублировал т.к. по другому не работало. при подстановке напр. вместо 60000 переменную  $delivery->free_from - на все выдает значение 0 вместо указанной в настройках

Ссылка на сообщение
Поделиться на другие сайты

Переменные не активируются, нет такой формы работы с ними...

Если хотите ЗАДАТЬ значения так переменных, то надо сначала понять, какое значение хотите.

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

 

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

например какой код нужен если надо брать с $delivery id==1 ->price

Ссылка на сообщение
Поделиться на другие сайты

например какой код нужен если надо брать с $delivery id==1 ->price

 

Вот теперь вопрос осмысленный.

Образец кода можно легко найти, например, в view/CartView.php

 

$delivery = $simpla->delivery->get_delivery(1);

$delivery->free_from -  порог бесплатной доставки для метода доставки с id=1

 

В прикрепленном файле код не такой, как в описании...

Изменено пользователем Kors
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
×
×
  • Создать...