Stan Ezersky

Stan Ezersky

Был в сети 26 сентября 2024, 15:42
Заказы принимаю
Сейчас обновляю товарищу его старый сайт, ещё сделанный на Drupal в 11 году и довольно мощный по старым стандартам.

Так вот по хранению контента у нас вышло вот такое дерево



Выбираются позиции по называнию коллекции, типа такого (для страницы «Коллекция»)

{var $Suite = $_modx->runSnippet('!msProducts', [
			'parents' => 9,
			'includeThumbs' => '300x300',
			'limit' => '0',
			'tpl' => 'mytpl',
			'optionFilters' => '{"model:LIKE":"' ~ $_modx->resource.pagetitle ~ '"}',
		])}
		
		<h3 class="block-title">Из коллекции «{$_modx->resource.pagetitle}»</h3>
		{$Suite}
У каждой позиции из каталога есть поле—опция «model», которое должно совпадать с названием коллекции.

Ещё вариант, через связи забивать коллекцию.

В продолжение, «страница позиции из коллекции», выборка товаров из этой же коллекции

{var $similarModels = $_modx->runSnippet('!msProducts', [
 'depth' => '3',
 'resources' => '-' ~ $_modx->resource.id,
 'parents' => 9,
 'includeThumbs' => '300x300',
 'limit' => '100',
 'sortby' => 'id',
 'sortdir' => 'ASC',
 'optionFilters' => '{"model:LIKE":"' ~ $model ~ '"}',
 'tpl' => 'mytpl',
])}

{if $similarModels != ''}
 <h3 class="block-title">Ещё из коллекции {$model}</h3>
 <div>
    {$similarModels}
  </div>
{/if}
Опять же, можно и через связи связать товары из 1 коллекции, только зачем.

Если нужно готовое решение, пишите. Могу сделать сборку после сдачи проекта

Как ни крути, но выше предложный вариант — это костыль!
Я, лично, не считаю такое решение костылём.

Пока что, это единственное решение позволить оформлять покупки без email-адреса.

Буду признателен, да и не только я, если найдёте элегантное решение.

Ниже Михаил написал, что обязательное указание email встроено в ядро miniShop2 и без него никак.
Рабочий код с работающего сайта.

При клике на кнопку «Нет email» поле для ввода почты прячется, в инпут подставляется фейковый емейл в формате датасегодня@fakemail.com

<div class="form-group">
				<label for="email">
					<span class="required">*</span> Email
				</label>
				<input type="email" id="email" placeholder="Email" name="email" value="" class="form-control{('email' in list $errors) ? ' error' : ''}">
				<span  id="noemail" type="button">Нет email</span>
			</div>
И js

//Fake Email generate
	
	$('#noemail').click(function(){
		var time = Date.now();
		var fakeemail = time + "@fakemail.com";
		$('#email').val(fakeemail).hide();
		$('#noemail').hide();
	});
Дальше сами, думаю, ничего разжёвывать не надо
Всё указано
[[!pdoPage:default=`<div>В этой категории ещё нет материалов</div>`?
    &element=`getTickets`
    &ajaxMode=`button`
    &parents=`[[*id]]`
    &includeTVs=`picture`
    &processTVs=`1`
    &prepareTVs=`1`
    &tvPrefix=``
    &limit=`6`
    &tpl=`custom.tpl.Tickets.list.row`
    &hideContainers=`1`
    &ajaxTplMore=`@INLINE <div class="clearfix text-center mt40"><button class="btn btn-red btn-lg btn-more"><i class="fa fa-refresh"></i> Загрузить ещё</button></div>`
    &frontend_css=``
]]