Андрей П

Андрей П

С нами с 05 ноября 2015; Место в рейтинге пользователей: #291
Володя
01 сентября 2017, 09:53
4
+3
Тема очень обширна и возможны разные варианты. Можно использовать различные сборщики, например тут Василий описал детально сборку с помощью gulp. Кто то использует minifyx.

Могу поделиться своим решением на основе html-compressor.

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

Способ не идеален, так как требует обработки страницы на стадии рендера и это конечно минус, но задержки не так велики. Пакет находится в стадии тестирования, но результаты примерно такие



я ни кого не призываю использовать этот пакет, просто делюсь способом оптимизации.

ps. кстати данный пакет подключен и тут s6200.h3.modhost.pro/6/12010.html
но там нет оптимизации картинок потому результат не 100…

Михаил
21 июня 2017, 14:36
2
+3
Можно попробовать использовать Fenom
{if $parents == 5}
{/if}
Или
{switch $parents}
	{case '5'}

	{case '6'}

	{case default}

	
{/switch}
Документация
Кирилл
19 июня 2017, 01:50
1
+2
Кому надо
{set $rows = json_decode($_modx->resource.options, true)}
                    {var $count=0}
                    {foreach $rows as $row}
                        {if $row.active == '1'}
                        {include ++$count}
                            <option value="{$row.alt}">{$row.alt}</option>
                        {/if}
                    {/foreach}
                    {if $count=='0'}
                     <option value="">Вакансий нет</option>
                    {/if}
Василий Наумкин
29 мая 2017, 08:56
4
+3
В modstore.pro всё как раз сделано через теги miniShop2.

Вывод тегов товара в чанке:
{if count($product.tags)}
	<div class="tags">
		{foreach $product.tags as $tag}
			<a href="{$packages_url}/tag/{$tag}">{$tag}</a>
	        {/foreach}
	</div>
{/if}

При клике юзер переходит по ссылке /packages/tag/любойтег, для которой должен сработать плагин OnPageNotFound, проверяющий наличие секции tag в адресе:
$uri = trim(urldecode($_SERVER['REQUEST_URI']), '/');
$tmp = explode('/', preg_replace('#\?.*#', '', $uri));
if (count($tmp) == 3 && $tmp[1] == 'tag') {
    $value = preg_replace('#[^\w\s\.-]#u', '', $this->modx->stripTags(urldecode($tmp[2])));
    if (!empty($value)) {
        $this->modx->setPlaceholder('extras_tag', $value);
        $this->modx->resource = $this->modx->request->getResource('id', $this->modx->config['packages_id']);
        if ($this->modx->resource) {
            $this->modx->resource->set('longtitle', $this->modx->resource->longtitle . " ($value)");
            $this->modx->resource->set('pagetitle', $this->modx->resource->pagetitle . " ($value)");
        }
        $this->modx->sendForward($this->modx->config['packages_id'], ['merge' => true]);
    }
}

Дальше идёт загрузка страницы с выводом каталога, на которой вызывается mFilter2, где в &element указан не msProducts, а специальный сниппет-обёртка extraProducts. Он смотрит наличие выставленного плейсхолдера extras_tag, и вызывает уже msProducts:
if ($tag = $modx->getPlaceholder('extras_tag')) {
    $table = $modx->getTableName('msProductOption');
    $c = $modx->prepare("SELECT COUNT(product_id) FROM {$table} WHERE `key` = 'tags' AND `value` = '{$tag}'");
    if ($c->execute() && !$c->fetchColumn()) {
        $modx->sendRedirect($modx->makeUrl($modx->resource->id));
    }
    $scriptProperties['innerJoin']['Tag'] = [
        'alias' => 'Tag',
        'class' => 'msProductOption',
        'on' => 'Tag.key="tags" AND Tag.product_id = msProduct.id AND Tag.value = "' . $tag . '"',
    ];
}

return $modx->runSnippet('msProducts', $scriptProperties);

Так что да, теги в miniShop2 есть, но реализацию работы с ними на сайте я оставляю на совести разработчика.
Илья Уткин
20 апреля 2017, 10:53
3
+1
Я использую вот такой скрипт для генерации превьюшек ms2Gallery. Этот код вставляется в Console и запускается прямо из браузера.
Максим
13 апреля 2017, 20:06
1
0
Никто не ответит? ))
Володя
11 апреля 2017, 07:26
5
+2
примерно так можно
s6200.h3.modhost.pro/katalog/11999.html
joxi.ru/E2pMqLGS9YgaRA
{foreach $options as $name => $values}
    <div class="form-group">
        <label class="col-md-2 control-label" for="option_{$name}">{('ms2_product_' ~ $name) | lexicon}:</label>
        <div class="col-md-10">
            <select name="options[{$name}]" class="input-sm form-control" id="option_{$name}">
                {foreach $values as $value}
                    <option value="{$value}">{$value}</option>
                {/foreach}
            </select>
        </div>
    </div>    
        
        
    <div class="form-group form-inline embroidery_parent" style="display:none;">    
        <label class="col-md-2 control-label" for="option_{$name}"></label>
        <div class="col-md-10">
			<input type="text" name="options[embroidery_text]" placeholder="Текст вышивки" class="input-sm form-control" value="">
		</div>
    </div>
    
{/foreach}

<script>
$(document).on('change', '.ms2_form', function (e) {   
    
    var embroidery = $(this).find('select[name="options[embroidery]"]');
    var embroidery_text = $(this).find('input[name="options[embroidery_text]"]');
    if (embroidery.val() == 'да') {
        embroidery_text.closest('.embroidery_parent').show();
    }
    else {
        embroidery_text.closest('.embroidery_parent').hide();
        embroidery_text.val('');
    }
});
</script>
Andrei D.
10 апреля 2017, 11:08
3
0
ну или эпичней
<?php
$id = $modx->resource->get('id');
$depth .= count($modx->getParentIds($id));
$level = 'level_';
$chunk = $modx->getOption($level.''.$depth,$scriptProperties, '');
if (preg_match('/^@INLINE/',$chunk)) {
    return substr($chunk, 7);
}
* на всякий тоже можно оставить
} else {
      return $modx->getChunk($chunk);
}


[[!hi?
&level_1=`@INLINE hi`
&level_2=`@INLINE hello`
&level_3=`@INLINE good`
]]
Максим Кузнецов
10 апреля 2017, 08:29
2
+3
Не нужно 2 раза вызывать один и тот же сниппет:

{set $result = $_modx->runSnippet('!pdoResources', [
	'parents' => id родителя
])}

{if $result | length > 0}
	{$result}
{else}
	//если вывода нет
{/if}