Stan Ezersky

Stan Ezersky

С нами с 18 февраля 2014; Место в рейтинге пользователей: #29
Алексей Смирнов
14 апреля 2017, 18:41
1
+1
Напишите снипет с названием Rnd:
<?php
return rand(10,10000);
А где вызываете стиль CSS и JS (аналогично) напишите так:
<link rel="stylesheet" href="templates/css/still.css?v1.[[!Rnd]]">
Проблема с версткой должна пропасть :)
Ну и потом когда на боевой переведете снимите этот RND или уберите восклицательный знак :)
Виталий Серый
14 апреля 2017, 15:23
1
+2
Василий Наумкин однажды писал про переключение контекстов. Рекомендую ознакомиться. Но если лень возиться и хочется побыстрее разделаться с вопросом, то пропишите:
default:
            // Set the default language/context here
            $modx->switchContext('web');
            $url = $modx->makeUrl($modx->getOption('error_page'));
            $modx->sendRedirect($url, array('responseCode' => 'HTTP/1.1 404 Not Found'));
            break;
Володя
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>
Володя
30 марта 2017, 19:00
6
+3
пример вывода всех тегов
<!-- tags -->
{set $tags = $_modx->runSnippet('pdoResources',[
'class' => 'msProductOption',
'sortby' => 'value',
'sortdir' => 'ASC',
'where' => json_encode([
'key' => 'tags',
'value:!='=> 'undefined'
]),
'select' => 'DISTINCT(msProductOption.value) as id, "tag" as class_key',
'limit' => 0,
'return' => 'json'
])}
{set $tags = $tags | fromJSON}
{if count($tags)}
	<ul class="uk-float-right uk-navbar-nav tm-header-tags">
		<li data-uk-dropdown="" aria-haspopup="true" aria-expanded="false">
			<a>{'msfbshop_tags' | lexicon}</a>
			<div aria-hidden="true" class="uk-dropdown uk-dropdown-navbar uk-dropdown-bottom">
				<ul class="uk-nav uk-nav-navbar">
				{foreach $tags as $row}
					<a href="{$row.link}">{$row.id}</a>
				{/foreach}
				</ul>
			</div>
		</li>
	</ul>
{/if}
Василий Наумкин
28 марта 2017, 15:07
2
+5
Гораздо лучше и проще переопределить функцию из своего скрипта, загруженного позже оригинального:

Например:
$(document).ready(function() {
	mSearch2.load = function (params, callback, animation) {
		// ...
	};
})
Тогда и основной скрипт не нужно будет переименовывать и заморачиваться при обновлениях с добавлением исправлений.
Максим Кузнецов
25 марта 2017, 11:17
3
+3
Если использовать минимальное количество запросов, то можно воспользоваться fenom'ом примерно таким образом:

//Собираем ресурсы, из которых необходимо будет сформировать табы
{var $resource_list = $_modx->runSnippet('!pdoResources', [
	...
	'return' => 'json'
])}

//Родитель, от которого формируем табы
{set $tab_parent = '11'}

{set $tabs = ''}
{foreach $resource_list | fromJSON | split as $item}
	{set $parent = $item['parent']}
	{set $id = $item['id']}
	{set $pagetitle = $item['pagetitle']}

	//Настроить оформление по вкусу
	{if $parent == $tab_parent}
		{set $tabs = $tabs ~ '<a data-id="' ~ $id ~ '" class="tab-selector">' ~ $pagetitle ~ '</a>'}
	{else}
		{set $tab_childs[$parent][$id] = '<div class="body">' ~ $pagetitle ~ '</div>'}
	{/if}
{/foreach}


<div class="wrapper">
	<div class="tabs">{$tabs}</div>
	<div class="items">
		{foreach $tab_childs as $parent_id => $tab_content}
			<div data-parent="{$parent_id}" class="body">
				{foreach $tab_content as $tab_item}
					{$tab_item}
				{/foreach}
			</div>
		{/foreach}
	</div>
</div>
Евгений Шеронов
13 марта 2017, 10:02
2
0
Для тех, кто любит, чтобы совсем красиво было — правильный id заказа можно получить так:

miniShop2.Callbacks.Order.submit.response.success = function (response) {
...
var orderId = response.data.msorder;
...
}
Не забудьте дописать response в первой строке.
Fi1osof
14 января 2017, 04:04
5
+4
Здесь важно учесть следующий момент: проиндексирован http-сайт уже или нет. Если нет, то можно смело сразу зарубать на https с настройкой редиректа. А если да, то такая процедура запросто может выбить сайт из индекса на месяц-два, а то и больше (что вряд ли кому-то понравится). Дело в том, что http — Это 80-ый порт, а https — 443. Для поисковиков это разные сайты (технически ведь на разных портах могут быть разные сайты и может быть разный контент). И получается, что новый сайт еще не проиндексирован, а новый (https) еще не индексированный. По этой причине надо делать сайт доступным и по http и по https. Но тут возникает еще один момент: Страницы в MODX кешируются и могут возникать случаи, когда на http-страницах все ссылки на https и наоборот. Если с https-ссылками http- страницах еще не особо страшно, то на https-страницах это может приводить к тому, что часть контента просто не будет подгружаться (браузер заблокирует соединения на http с https-страниц). Я в таких случаях на сайте прописываю такой плагин:
if($modx->context->key == 'mgr'){
    return;
}
 
switch($modx->event->name){
    
    case 'OnMODXInit':
    // case 'OnHandleRequest':
        
        if(!empty($_SERVER['SERVER_PORT']) AND $_SERVER['SERVER_PORT'] == '443'){
            
            $modx->setOption('server_protocol', 'https');
            
            $modx->setOption('site_url', 'https://' . $modx->getOption('http_host', null) . $modx->getOption('base_url', null));
            
            $cache_prefix = $modx->getOption('cache_prefix', null, '/') . '443/';
            $modx->setOption('cache_prefix', $cache_prefix);
        }
        
        break;
}
Суть его в том, чтобы кеш-префикс поменять для https-запросов.
Важно: на разных хостингах вместо $_SERVER['SERVER_PORT'] может быть другой параметр, надо смотреть индивидуально

Тогда сайт не будет потерян поисковиком и не вызовет выпода из индекса.
В robots.txt еще надо прописать жестко Host: site_domain.
После этого месяца через три (когда поисковики полностью перестроят индексы), можно уже будет настроить и редирект.
Алексей
10 января 2017, 10:49
1
0
Чтобы countChildren не считало категории, мне приходилось создавать копию сниппета pdoMenu, в котором загружался класс pdoMenu_custom. Этот класс должен расширять класс pdoMenu и переопределять метод templateBranch. В методе поменять только
$count = $this->modx->getCount('modResource', array(
                    'id:IN' => $ids,
                    'published' => true,
                    'deleted' => false,
                ));
на
$count = $this->modx->getCount('modResource', array(
                    'id:IN' => $ids,
                    'published' => true,
                    'deleted' => false,
 		    'isfolder' => 0,
                ));
Не знаю верное ли решение, но у меня работало.
Futuris
18 декабря 2016, 16:08
1
0
А где создать и как запустить? Куда вставить этот код —
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->addPlugin('msplColor', '{core_path}components/msplcolor/index.php');
}