Jump to content

Разный дизайн плиток товара для категории.


Go to solution Solved by Kors,

Recommended Posts

Подскажите как управляться с этим параметром

 

{if $category->id == 5}
Вывод плиткой
{else}
Вывод в ряд
{/if}

Мне нужно к примеру у меня 2 категории

1 - Плитки

2 - Список

 

Я хочу задать дизайн для плиток свой и для списка свой

Сама страница товара неизменна. 

 

Категории у меня называются plitka и cpicok 

Как правильно это все указать и расписать ?. 

Link to post
Share on other sites
  • Solution

Если это надо для страниц категорий, то

 

в view/ProductsView.php  вместо стандартной строки

        $this->body = $this->design->fetch('products.tpl');

 

ставьте что-то типа

 

if ($category->id == 5){
//Вывод плиткой из отдельного шаблона
$this->body = $this->design->fetch('products_plitka.tpl');
}
else{
//Вывод стандартный

$this->body = $this->design->fetch('products.tpl');
}

 

Универсальное решение:

http://simpla-tuning.com/raznye-shablony-dlya-kategorij

Link to post
Share on other sites

Если это надо для страниц категорий, то

 

в view/ProductsView.php  вместо стандартной строки

        $this->body = $this->design->fetch('products.tpl');

 

ставьте что-то типа

 

if ($category->id == 5){

//Вывод плиткой из отдельного шаблона

$this->body = $this->design->fetch('products_plitka.tpl');

}else{

//Вывод стандартный

$this->body = $this->design->fetch('products.tpl');

}

 

Универсальное решение:

http://simpla-tuning.com/raznye-shablony-dlya-kategorij

 

А как лучше? Как в вашем примере?  Или условием в шаблоне?

 

Я не люблю программный код трогать просто, но если чем-то лучше...

 

Link to post
Share on other sites

А как лучше? Как в вашем примере?  Или условием в шаблоне?

 

Я не люблю программный код трогать просто, но если чем-то лучше...

 

 

Как лучше - зависит от обстоятельств, целей, вкусов и проч.

 

Например, если это надо только для ОДНОЙ категории, то проще  так, как написано.

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

 

А вообще способов много. Можно, видимо, сделать и условием в шаблоне. Способов разных много. Пишите свои способы, пусть народ смотрит и оценивает...

Edited by Kors
Link to post
Share on other sites
  • 2 months later...

У меня есть еще решение как подкатегории вывести в виде плиток) Тоже удобно)

 

У меня теперь есть знание, что у larenso есть удобное решение. Очень полезно такое знать. А еще лучше на бумажке это написать и повесить на видном месте, чтоб не позабыть...

Link to post
Share on other sites
  • 6 years later...

А сделать в карточке товара если количество вариантов ноль?

 

if ($product->variant-stock == 0){
return $this->design->fetch('product_stock.tpl');
}else{
return $this->design->fetch('product.tpl');
}

Как правильно написать такого плана в ProductView?

Link to post
Share on other sites

Примерно так и написать.

Желательно учесть только, что

1.  Написанное условие бессмысленно. Возможно, надо писать $product->variant->stock == 0.

2. "количество вариантов ноль" - такого штатно не бывает в принципе, у товара при редактировании в админке всегда есть минимум 1 вариант.  Если имеете в виду, что у каждого варианта товара кол-во нулевое, то так и писать надо, и соответственно условие менять...

Link to post
Share on other sites
25 минут назад, phukortsin сказал:

Примерно так и написать.

Желательно учесть только, что

1.  Написанное условие бессмысленно. Возможно, надо писать $product->variant->stock == 0.

2. "количество вариантов ноль" - такого штатно не бывает в принципе, у товара при редактировании в админке всегда есть минимум 1 вариант.  Если имеете в виду, что у каждого варианта товара кол-во нулевое, то так и писать надо, и соответственно условие менять...

Да, имел ввиду что количество.

а можно как-то с foreach совместить?

ибо в шаблоне к примеру если из 4х вариантов с количеством 0, но один вариант имеет количество бесконечное, то отображается в шаблоне как с количеством ноль:

if ($product->variant-stock == 0){
return $this->design->fetch('product_stock.tpl');

Как правильно прописать условие, чтобы отображалось в шаблоне return $this->design->fetch('product.tpl'); ?

Edited by get31
Link to post
Share on other sites

Ссори, вопрос все еще открыт)))))

Отображение идет в разные .tpl, но хочу сделать вывод в файле где количество варианта есть - вывод тех вариантов, которые с нулевым количеством. Подскажите плиз, как это сделать?

Link to post
Share on other sites
1 час назад, phukortsin сказал:

Так и делать - писать условие проверки кол-ва у вариантов.

{foreach $product->variants as $v}
{if $v->stock == 0}
{/if}
{/foreach}

у меня так и стоит, но не выводит варианты с нулевым количеством

Link to post
Share on other sites
3 часа назад, phukortsin сказал:

Надо все проверять, в том числе то, что эти варианты поступают в шаблон из PHP.

Делал на стандартной Simpla.

В ProductView.php заменил вывод шаблона

if ($product->variant->stock == 0){
return $this->design->fetch('product_stock.tpl');
}else{
return $this->design->fetch('product.tpl');
}

В шаблонах product.tpl

			{foreach $product->variants as $v}
				{if $v->stock > 0}
					<tr class="variant">
						<td>
							<input id="product_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $product->variant->id==$v->id}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
						</td>
						<td>
							{if $v->name}<label class="variant_name" for="product_{$v->id}">{$v->name}</label>{/if}
						</td>
						<td>
							{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
							<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
						</td>
					</tr>
				{/if}
			{/foreach}
			{foreach $product->variants as $v}
				{if $v->stock == 0}
					<tr class="variant" style="opacity:.4;background:lime;">
						<td>
							<input id="product_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $product->variant->id==$v->id}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
						</td>
						<td>
							{if $v->name}<label class="variant_name" for="product_{$v->id}">{$v->name}</label>{/if}
						</td>
						<td>
							{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
							<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
						</td>
					</tr>
				{/if}
			{/foreach}

 

в админке добавляем несколько вариантов, сразу ставим количество НОЛЬ, сохраняем, проверяем - работает норм. Потом одному варианту (не первому) убираем количество ноль и получаем не рабочий метод.

Link to post
Share on other sites
2 часа назад, phukortsin сказал:

Надо проверять все моменты. Из написанного кода

1. неясно, какой набор вариантов поступает в шаблон  из PHP,

2. как идет вывод в шаблоне product_stock.tpl.

1. варианты из php


		$variants = array();
		foreach($this->variants->get_variants(array('product_id'=>$product->id, 'in_stock'=>true)) as $v)
			$variants[$v->id] = $v;
		
		$product->variants = $variants;
		
		// Вариант по умолчанию
		if(($v_id = $this->request->get('variant', 'integer'))>0 && isset($variants[$v_id]))
			$product->variant = $variants[$v_id];
		else
			$product->variant = reset($variants);
					

2. Вывод аналогичен product.tpl, только заменил <h1> на "ссори, товары не в наличии", чтобы понять переключает ли шаблон. Ну и {foreach $product->variants as $v} выше, который правильный

 

Link to post
Share on other sites
3 часа назад, phukortsin сказал:

Из того, что написано, выходит, что выбираются лишь варианты с ненулевым к-вом ('in_stock'=>true). Что не стыкуется со сказанным ранее... 

Правильно, но если это убрать будет нормально выводиться, НО возникает другая проблема: если в админке ставим количество бесконечно какому-то варианту, то покажет страницу product_stock.tpl (нет в наличии)

Link to post
Share on other sites
7 часов назад, get31 сказал:

Правильно, но если это убрать будет нормально выводиться, НО возникает другая проблема: если в админке ставим количество бесконечно какому-то варианту, то покажет страницу product_stock.tpl (нет в наличии)

Непонятно зачем вы дергаете вьюшку, не проще вашу манипуляцию реализовать внутри вью? 
Стукните в личку, думаю разберёмся за час.  

Link to post
Share on other sites
15 часов назад, get31 сказал:

Правильно, но если это убрать будет нормально выводиться, НО возникает другая проблема: если в админке ставим количество бесконечно какому-то варианту, то покажет страницу product_stock.tpl (нет в наличии)

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

Link to post
Share on other sites
3 часа назад, phukortsin сказал:

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

Честно, не пойму. 

В 23.01.2023 в 09:47, get31 сказал:

foreach($this->variants->get_variants(array('product_id'=>$product->id, 'in_stock'=>true)) as $v) $variants[$v->id] = $v;

Нужно это заделать в if где в одном показать in_stock в другом без? или как?

Link to post
Share on other sites

Я вообще не пойму в чем проблема?

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

Либо как вариант - выбираем варианты, которые есть в наличии. Если таких вариантов нет, то тогда выбираем варианты, которых нет в наличии и показываем шаблон, который нет в наличии.

Link to post
Share on other sites

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

2 часа назад, get31 сказал:

Нужно это заделать в if где в одном показать in_stock в другом без? или как?

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

Что ему сказать -  если надо непременно надо "заделывать", то заделывай да смотри.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...