Olenka Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Всем, Привет! Спасибо, Kors, за доработочку. Решила поделиться со всеми)))Версия 2.2.4 Работает так1. если вариант один, то выводим просто его цену2. если вариантов более одного, а цена у них одинаковая, то выводим просто одну цену.3. если вариантов более одного, а цены разные то выводим 3000...6900, не зависимо от сортировки в админке. 1. view/ProductView.php после $variants = array(); foreach($this->variants->get_variants(array('product_id'=>$product->id, 'in_stock'=>true)) as $v) $variants[$v->id] = $v; вставить $pmin=null; $pmax=null; if(is_array($variants))foreach ($variants as $variant) { if(!$pmin || $pmin>$variant->price) $pmin=$variant->price; if(!$pmax || $pmax<$variant->price) $pmax=$variant->price; } $product->variants = $variants; $product->pricemin = $pmin; $product->pricemax = $pmax; 2. view/ProductsView.php после foreach($variants as &$variant) { //$variant->price *= (100-$discount)/100; $products[$variant->product_id]->variants[] = $variant; } вставить if(is_array($products))foreach ($products as &$product) { $pmin=null; $pmax=null; if(is_array($product->variants))foreach ($product->variants as $variant) { if(!$pmin || $pmin>$variant->price) $pmin=$variant->price; if(!$pmax || $pmax<$variant->price) $pmax=$variant->price; } $product->pricemin = $pmin; $product->pricemax = $pmax; } 3. design/default/html/products.tpl design/default/html/product.tpl в нужном месте вставить {if $product->pricemin<$product->pricemax} <span class="price">{$product->pricemin|convert} ... {$product->pricemax|convert} <span class="currency">{$currency->sign|escape}</span></span> {else} <span class="price">{$product->pricemax|convert} <span class="currency">{$currency->sign|escape}</span></span> {/if} А чтобы это чудо заработало в Рекомендуемых, Новинках и т.д в файле view/View.php , везде после // Для каждого варианта foreach($variants as &$variant) { // добавляем вариант в соответствующий товар $products[$variant->product_id]->variants[] = $variant; } вставить if(is_array($products))foreach ($products as &$product) { $pmin=null; $pmax=null; if(is_array($product->variants))foreach ($product->variants as $variant) { if(!$pmin || $pmin>$variant->price) $pmin=$variant->price; if(!$pmax || $pmax<$variant->price) $pmax=$variant->price; } $product->pricemin = $pmin; $product->pricemax = $pmax; } Всем удачи))) Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Оригинально А почему не сам Корс выложил? Цитата Ссылка на сообщение Поделиться на другие сайты
Olenka Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 Я спросила его разрешения. Он сказал если так хочеться, выкладывайте. Вот я решила поделиться)) И это не бесплатное решение)) моя инициатива. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Если автор не возражает, не вижу ничего криминального Но я бы все тоже самое сделал уже в шаблоне, Smarty это вполне позволяет. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 {if $product->variants|count > 0} {$min = 0} {$max = 0} {foreach $product->variants as $v} {if $min ==0 || $min>$v->price} {$min = $v->price} {/if} {if $max ==0 || $maxprice} {$max = $v->price} {/if} {/foreach} {if $min {$min|convert} ... {$max|convert} {$currency->sign|escape} {else} {$product->variant->price|convert} {$currency->sign|escape} {/if} {/if} Проверил, работает - http://demo.simplacms.ru/catalog/mobilnye-telefony Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Это было написано за 10 мин, логика, кстати полностью Ваша)) Из первого поста. Цитата Ссылка на сообщение Поделиться на другие сайты
Olenka Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 Мальчики)) Мне что делать? оставлять как есть или что-то переделать? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 А нет там такого:Программист полез в движок, сделал кучу доработок в разных файлах, вместо того, чтобы просто поправить шаблон.Зачем он это сделал?Я написал свое решение, чтобы показать неправильность вашей логики в принципе)) Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Обычно опытный народ придерживается правила: если работает правильно, то лучше ничего не трогать...С этой точки зрения вы правы. Как быть с обновлением движка? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Моя идея в том, что если есть возможность сделать что-то, не трогая движок, то надо это делать именно так. Так для вас достаточно мелко?? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 На эту тему можно долго спорить и мериться глубиной доработок... Но решение, основанное на шаблоне - более универсальное. Подходит для всех версий 2.*, затрагивает в 2 раза меньше файлов, позволяет вывести где угодно, хоть в Связанных, хоть в Корзине, не требует ФТП. Приведите хотя бы один плюс вашего решения. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Уважаемый, а вы проверяли мое решение? Оно работает Я правил его раза 3-4, возможно у вас был не конечный вариант? А сравнивать одно рабочее решение с другим - вполне корректно. Неужели вы не в состоянии смирится с тем, что вы НЕПРАВЫ. Боюсь вас огорчить, но это - болезнь. Цитата Ссылка на сообщение Поделиться на другие сайты
Olenka Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 Kosjak76, Я так поняла это надо в каждый цикл? если да, то не вариант. Универсально,но не практично. Засоряем шаблон. По мне вариант Korsa идеален. Это мое позитивненькое мнение))) Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Kosjak76, Я так поняла это надо в каждый цикл? если да, то не вариант. Универсально,но не практично. Засоряем шаблон. По мне вариант Korsa идеален. Это мое позитивненькое мнение))) Вариант Корса делает все то же самое, но не в шаблоне. Так что насчет "засорять" Вы погорячились, т.к. по производительности они одинаковы. А вот насчет апдейта движка Косяк правильно заметил - надо будет делать обновление - придется опять искать код Корса, чтобы вставить в код и так с каждым апдейтом. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Ну и, например, Связанные товары... В принципе, я, вообще, за то, чтобы движок не трогать, если есть такая возможность. Цитата Ссылка на сообщение Поделиться на другие сайты
Yaroslav Опубликовано 19 мая, 2014 Жалоба Поделиться Опубликовано 19 мая, 2014 Ну и, например, Связанные товары...В принципе, я, вообще, за то, чтобы движок не трогать, если есть такая возможность.Если есть возможность получить идентичный функционал, зачем лезть в код. У меня на сайте стоит куча доработок, и каждое новое обновление симплы - это огромный труд, приходится искать изменения в файлах и в коде от версии к версии, на что уходит куча времени... жаль, конечно, что в симпле отсутствует модульность... Цитата Ссылка на сообщение Поделиться на другие сайты
Sergey_Nikonorov Опубликовано 8 июня, 2014 Жалоба Поделиться Опубликовано 8 июня, 2014 А подскажите, куда этот код нужно вставить или какой код нужно заменить, а то я вставляю и не работает добавление в корзину. Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 23 июня, 2020 Жалоба Поделиться Опубликовано 23 июня, 2020 А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 100 до 100000 ? Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 23 июня, 2020 Жалоба Поделиться Опубликовано 23 июня, 2020 А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 100 до 100000 ?сделалкому нужно: {if $products} {$min = 0} {$max = 0} {foreach $products as $product} {if $min == 0 || $min > $product->variant->price} {$min = $product->variant->price} {/if} {if $max == 0 || $max < $product->variant->price} {$max = $product->variant->price} {/if} {/foreach} {if $min < $max} {$min|convert} ... {$max|convert} {$currency->sign|escape} {else} {$product->variant->price|convert} {$currency->sign|escape} {/if} {/if} Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 23 июня, 2020 Жалоба Поделиться Опубликовано 23 июня, 2020 сделалкому нужно: {if $products} {$min = 0} {$max = 0} {foreach $products as $product} {if $min == 0 || $min > $product->variant->price} {$min = $product->variant->price} {/if} {if $max == 0 || $max < $product->variant->price} {$max = $product->variant->price} {/if} {/foreach} {if $min < $max} {$min|convert} ... {$max|convert} {$currency->sign|escape} {else} {$product->variant->price|convert} {$currency->sign|escape} {/if} {/if} Вы не учли постраничную навигацию, ведь товары с большей ценой могут быть на других страницах.По хорошему нужно написать функцию (почти клон get_products) но на выходе получить MIN(v.price) as MIN и MAX(v.price) as MAX. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.