Страница 1 из 2
Вывести свойство в products.tpl
Добавлено: 11.10.2016, 13:52
trainracing
Не могу вывести определенное свойстро в списке товаров.
код в products.tpl
Код: Выделить всё
{foreach $product->features as $f}
{if $f->feature_id == '16'}
<span class="svoistvo1">{$f->value}Квт</span>
{/if}
{/foreach}
в view/productsview.php добавил:
Код: Выделить всё
$product->features = $this->features->get_product_options(array('product_id'=>$product->id));
$features = $this->features->get_product_options($products_ids);
foreach($features as &$feature)
{
$products[$feature->product_id]->features[] = $feature;
}
$properties = $this->features->get_options(array('product_id'=>$products_ids));
foreach($properties as $property)
$products[$property->product_id]->options[] = $property;
и не выводится ничего(( помогите плз правильным кодом
Добавлено: 11.10.2016, 15:33
korshunov
Ваш код выглядит так, как будет выискивали где могли что-то похожее и копировали до кучи без особого понятия...
И сами Ваши пояснения крайне небрежны. "в view/productsview.php добавил" - добавить можно очень по-разному.
Попробуйте для начала написать ТОЧНО, что и куда Вы вставили. Потом попробуйте объяснить, почему вставили именно это и именно туда, попробуйте понять, что делает каждая отдельная строка...
Добавлено: 12.10.2016, 09:02
trainracing
Я поэтому и прошу помочь, т.к. не разбираюсь в php. Пытался сделать по аналогии с viewproduct.php
код вставлял после строки 393:
Код: Выделить всё
foreach($options as $option) {
if(isset($features[$option->feature_id])) {
$features[$option->feature_id]->options[] = $option;
}
}
Прошу подсказать, как выводить свойства товара в списке товаров. Не могу понять.
Добавлено: 12.10.2016, 09:33
korshunov
В Вашей вставке масса ошибок.
Чтобы написать правильный код, надо поработать точно и аккуратно, а не кое-как.
Если готовы оплачивать работу, обращайтесь в личку...
Добавлено: 13.10.2016, 14:24
Vitaly
Да, мало что понятно из вашего вопроса, но попытаюсь дать наводку
Код: Выделить всё
{foreach $features as $key=>$f}
{if $f->id == 16}
{$f->name}<br>
{foreach $f->options as $o}
{$o->value}<br>
{/foreach}
{/if}
{/foreach}
Так можно вывести определенное свойство по id, с его значениями в products.tpl
Добавлено: 14.10.2016, 07:42
trainracing
Так ничего не выводится((
Vitaly писал(а):Да, мало что понятно из вашего вопроса, но попытаюсь дать наводку
Код: Выделить всё
{foreach $features as $key=>$f}
{if $f->id == 16}
{$f->name}<br>
{foreach $f->options as $o}
{$o->value}<br>
{/foreach}
{/if}
{/foreach}
Так можно вывести определенное свойство по id, с его значениями в products.tpl
Добавлено: 14.10.2016, 07:55
Vitaly
trainracing писал(а):Так ничего не выводится((
Пишите нормально вопросы.
Куда вы вставляете код?
Существующий ли ID свойства указываете?
Код: Выделить всё
{foreach $features as $key=>$f}
{$f->name}<br>
{foreach $f->options as $o}
{$o->value}<br>
{/foreach}
{/foreach}
Что выводит такой код?
Добавлено: 14.10.2016, 08:34
trainracing
в tiny_products.tpl после названия товара
Vitaly писал(а):trainracing писал(а):Так ничего не выводится((
Пишите нормально вопросы.
Куда вы вставляете код?
Существующий ли ID свойства указываете?
Код: Выделить всё
{foreach $features as $key=>$f}
{$f->name}<br>
{foreach $f->options as $o}
{$o->value}<br>
{/foreach}
{/foreach}
Что выводит такой код?
id конечно существует, я ж не дебил.
по коду - выводит все названия и содержания свойств всех товаров, а не все свойства и содерж именно этого товара (выводит текст левого меню)
Добавлено: 14.10.2016, 10:32
Vitaly
trainracing писал(а):Не могу вывести определенное свойстро в списке товаров.
Предложенный мной код, есть ответ на этот вопрос. Второй вариант кода выводит все свойства, потому как убрано условие, которое проверяет ID свойства.
trainracing писал(а):выводит все названия и содержания свойств всех товаров, а не все свойства и содерж именно этого товара (выводит текст левого меню)
Ну извините, экстрасенсорику не практикую. Учитесь внятно задавать вопросы, получите нужные ответы.
Добавлено: 18.10.2016, 08:01
trainracing
Vitaly писал(а):Ну извините, экстрасенсорику не практикую. Учитесь внятно задавать вопросы, получите нужные ответы.
Да, не подумал что никто не додумается, что мне опр. свойство нужно в списке товаров для каждого отдельного товара. Но как я понял подсказку тут ни от кого не дождешься.. только выпендреж(((
Добавлено: 18.10.2016, 09:44
m1hasik
trainracing писал(а):Vitaly писал(а):Ну извините, экстрасенсорику не практикую. Учитесь внятно задавать вопросы, получите нужные ответы.
Да, не подумал что никто не додумается, что мне опр. свойство нужно в списке товаров для каждого отдельного товара. Но как я понял подсказку тут ни от кого не дождешься.. только выпендреж(((
Нужный код выделен комментарием
/*Вывод свойств в каталоге*/Вот в файле ProductsView.php сделайте вот так
Код: Выделить всё
$images = $this->products->get_images(array('product_id'=>$products_ids));
foreach($images as $image)
$products[$image->product_id]->images[] = $image;
/*Вывод свойств в каталоге*/
foreach ($products_ids as $p_id) {
$properties = $this->features->get_product_options(array('product_id' => $p_id));
foreach($properties as &$property)
$products[$property->product_id]->options[] = $property;
}
/*Вывод свойств в каталоге*/
foreach($products as &$product)
{
if(isset($product->variants[0]))
$product->variant = $product->variants[0];
if(isset($product->images[0]))
$product->image = $product->images[0];
/*Вывод свойств в каталоге*/
if (isset($product->options[0]))
$product->option = $product->options[0];
/*Вывод свойств в каталоге*/
}
А в файле шаблона работайте вот так
Код: Выделить всё
{foreach $product->options as $o}
{if $o->feature_id == 'xx'}
{$o->value}
{/if}
{/foreach}
Добавлено: 18.10.2016, 11:10
korshunov
m1hasik писал(а):Вот в файле ProductsView.php сделайте вот так
Код: Выделить всё
$images = $this->products->get_images(array('product_id'=>$products_ids));
foreach($images as $image)
$products[$image->product_id]->images[] = $image;
/*Вывод свойств в каталоге*/
foreach ($products_ids as $p_id) {
$properties = $this->features->get_product_options(array('product_id' => $p_id));
foreach($properties as &$property)
$products[$property->product_id]->options[] = $property;
}
/*Вывод свойств в каталоге*/
foreach($products as &$product)
{
if(isset($product->variants[0]))
$product->variant = $product->variants[0];
if(isset($product->images[0]))
$product->image = $product->images[0];
/*Вывод свойств в каталоге*/
if (isset($product->options[0]))
$product->option = $product->options[0];
/*Вывод свойств в каталоге*/
}
Работать-то оно будет. НО:
Код безобразно нерациональный и совершенно недопустимый.
1. Например, если на странице категории показываются 20 товаров, то этот код будет чудесным образом делать 20 запросов к БД. Ужасно большая нагрузка на БД! Это выглядит примерно как заказать 20 автомобилей такси, чтобы перевезти 20 порций пиццы из магазина по одному адресу...
2. Другой момент - выбираются из базы ВСЕ свойства, а используется в итоге одно. Это выглядит примерно столь же нерационально: заказать 50 блюд на обед одному ребенку, а все, что останется - выбросить. Зато у ребенка выбор будет...
Очень не рекомендуется использовать предложенный метод. А "программистов" за такое надо бить долго и больно...
Добавлено: 18.10.2016, 11:42
m1hasik
Работать-то оно будет. НО:
Код безобразно нерациональный и совершенно недопустимый.
1. Например, если на странице категории показываются 20 товаров, то этот код будет чудесным образом делать 20 запросов к БД. Ужасно большая нагрузка на БД! Это выглядит примерно как заказать 20 автомобилей такси, чтобы перевезти 20 порций пиццы из магазина по одному адресу...
2. Другой момент - выбираются из базы ВСЕ свойства, а используется в итоге одно. Это выглядит примерно столь же нерационально: заказать 50 блюд на обед одному ребенку, а все, что останется - выбросить. Зато у ребенка выбор будет...
Очень не рекомендуется использовать предложенный метод. А "программистов" за такое надо бить долго и больно...
Человеку надо просто, что бы работало. Не нравится не фыркайте. Лучше бы подсказали нормально.
Если докопаться то и windows плохо работает.
Добавлено: 18.10.2016, 12:33
korshunov
m1hasik писал(а):Человеку надо просто, что бы работало.
Сомневаюсь, чтобы человеку надо, чтобы работало настолько ПЛОХО, как предложено.
Мне приходится раза 3-4 в год оптимизировать подобные фрагменты кода после того, как владелец сайта жалуется, что работает медленно и даже переход на более мощный сервер мало помогает...
m1hasik писал(а):Лучше бы подсказали нормально.
Образец того, как надо делать, можно видеть в том же файле в стандартном коде аккурат рядышком с Вашей вставкой. Требуется лишь глаза разуть...
m1hasik писал(а):Если докопаться то и windows плохо работает.
Вот Вы докопайтесь и сообщайте ТОЧНЫЕ результаты, чтобы не трепаться впустую.
А пока Ваше отношение явно несерьезное: ничего страшного, что у меня сработано плохо, у других тоже бывает...
Добавлено: 09.11.2016, 06:17
skull3d
В ProductsView.php находим:
и в конец первого цикла foreach($products as $product) добавляем строку:
Код: Выделить всё
$product->features = $this->features->get_product_options(array('product_id'=>$product->id));
Должно получиться так:
Код: Выделить всё
foreach($products as $product) {
$product->variants = array();
$product->images = array();
$product->properties = array();
$product->features = $this->features->get_product_options(array('product_id'=>$product->id));
}
Затем в tiny_products.tpl, выводим где угодно:
Код: Выделить всё
{foreach $product->features as $f}
{if $f->feature_id == 3}
<div>{$f->value}</div>
{/if}
{/foreach}
Добавлено: 09.11.2016, 10:34
korshunov
skull3d, Ваше решение мало отличается от того, которое ранее предложил m1hasik.
Недостатки те же: формально работает, но имеет те же два СУЩЕСТВЕННЫХ недостатка, упомянутые ранее. В то же время недалеко от Вашей вставки в стандартном коде можно видеть образец того, как такое надо делать...
Добавлено: 09.11.2016, 11:11
skull3d
Мы всё ближе и ближе к правильному решению, давайте поднажмем ребята :)
Добавлено: 09.11.2016, 15:39
korshunov
Если Вы хорошо копируете плохие решения, это не есть "всё ближе и ближе"...
Добавлено: 21.11.2016, 13:11
trainracing
korshunov писал(а):Если Вы хорошо копируете плохие решения, это не есть "всё ближе и ближе"...
Корс, я тут почитал все предложения, правильно было бы так?
Код: Выделить всё
$features = $this->features->get_options(array('product_id'=>$products_ids));
foreach($features as $feature) {
$products[$feature->product_id]->features[] = $feature; }
Добавлено: 22.11.2016, 09:39
korshunov
Это уже что-то осмысленное...
А если использовать
$features = $this->features->get_options(array('product_id'=>$products_ids, 'feature_id'=>16));
то получите выборку только одного свойства, будет экономнее...