Jameson

Jameson

С нами с 03 мая 2018; Место в рейтинге пользователей: #451
Баха Волков
15 октября 2018, 04:58
1
-1
Всё, всё сделали неправильно

<form method="post" class="ms2_form">
    <input type="hidden" name="key" value="{$product.key}">
    <div class="qty"> 
        <button class="btn btn-default minus_btn"></button>
        <input type="text" name="count" class="txtbox" value="{$product.count}" >
        <button class="btn btn-default plus_btn"></button>
        <button class="d-none" type="submit" name="ms2_action" value="cart/change"></button>
    </div>
</form>

Если уж button-ами хотите
Алексей Шумаев
24 сентября 2018, 00:13
2
+2
Простой рецепт:
1. Выносите в ClientConfig поля для внешних скриптов (метрика, ets). например: ExtJSHead, ExtJSBody, ExtJSFooter
2. Выводите эти поля, где надо через сниппет:
{'extScripts' | snippet : ['input'=>'head']}
Сниппет:
if(!isset($input)) return;
$ext = array(
    'head' => $modx->getOption('ExtJSHead')
    ,'body' => $modx->getOption('ExtJSBody')
    ,'footer' => $modx->getOption('ExtJSFooter')
);

$search  = array('{', '}');
$replace = array('{ ', ' }');
$out = str_replace($search,$replace,$ext[$input]);

return $out;
Баха Волков
15 июля 2018, 09:01
4
0
Ссылку получать нужно так:

[[~id ресурса]]
{id ресурса | url}

// Прямое указание id ресурса
[[~2]]
{2 | url}

//  Динамичное указание id ресурса
[[~[[+id]]]]
{$id | url}
[[~[[*id]]]]    // Вдруг нужна циклическая ссылка :)
{$_modx->resource.id | url}    // Вдруг нужна циклическая ссылка :)

// ну а если ваш плейсхолдер [[!+gl.current.data.resource]] возвращает именно id, то
[[~[[!+gl.current.data.resource]]]]
{var $myplace = $_modx->getPlaceholder('gl.current.data.resource')}    // Вдруг еще понадобится
{$myplace | url}

// Кстати, для получения полей есть еще FastField
[[#id ресурса.поле или даже тв которое нужно вывести]]
{id ресурса | resource : 'поле или даже тв которое нужно вывести'}

// Пример
[[#1.pagetitle]]    // Получить pagetitle у ресурса с id = 1
{1 | resource : 'pagetitle'}

Как получить родителя по id?
[[*parent]]    // На странице ресурса
{$_modx->resource.parent}
[[+parent]]    // В чанках вывода
{$parent}
[[#[[!+gl.current.data.resource]].parent]]    // Тот случай когда нужно получить id по плейсхолдеру
{$_modx->getPlaceholder('gl.current.data.resource') | resource : 'parent'}
[[pdoField? &id=`[[!+gl.current.data.resource]]` &field=`parent`]]    // Ну или через pdoField
{var $myplace = $_modx->getPlaceholder('gl.current.data.resource')}
{$myplace | resource : 'parent'}

Для корректности, вашем случае нужно поступить вот так:
[[~[[#[[!+gl.current.data.resource]].parent]]]]
{$_modx->getPlaceholder('gl.current.data.resource') | resource : 'parent' | url}
// или
[[~[[pdoField? &id=`[[!+gl.current.data.resource]]` &field=`parent`]]]]
{var $myplace = $_modx->getPlaceholder('gl.current.data.resource')}
{$myplace | resource : 'parent' | url}

UPD
Забыл совсем про uri
Если, что в поле uri хранится ссылка на страницу, но никак не в alias
Наумов Алексей
07 апреля 2017, 15:01
2
+2
Плагин на OnDocFormSave, возможно еще кеш нужно подчистить:

<?php
$eventName = $modx->event->name;
$logged = $modx->user->hasSessionContext('web');

switch($eventName) {
    case "OnDocFormSave":
        $template = $resource->get('template');
        // определяем тикет по шаблону или class_key
        if($template == 9) { 
            // если редактирует его автор и контект - web,
            if($modx->user->get('id') == $resource->get('createdby') && $modx->context->get("key") == "web" ) {
                // снимаем тикет с публикации..
                $resource->set('published', 0);
            }
            
            // .. сохраняем ..
            $resource->save();

        }
        break;
}
Максим Кузнецов
01 ноября 2015, 22:49
1
0
[[*createdby:userinfo=`photo`]]

— вызванное в нужном ресурсе вернет прямой урл аватара автора. Вам должна помочь следующая конструкция:

<img src="[[*createdby:userinfo=`photo`]]" />

Upd: если же аватар нужно вернуть внутри возвращаемых результатов какого-нибудь сниппета, то замените "*" на "+".
Павел Гвоздь
15 октября 2015, 20:25
2
+4
Вот так при помощи Fenom я вывожу данные для отладки только для админов, авторизованных в контексте mgr:
{if $_modx->hasSessionContext('mgr')}
	<div style="position:fixed;right:0;bottom:0;background:#fff;border:1px solid #bbb;padding:4px 9px;"><small>[^t^], [^qt^], [^q^]</small></div>
{/if}
Вот так это выглядит во фронте:
Сергей Шлоков
14 сентября 2015, 11:37
1
0
Если на странице один thread, то проще простого.
Создаем сниппет CountComments
$thread = $modx->getObject('TicketThread', array('resource' => $modx->resource->get("id")));
if (empty($toPlaceholder)) {
	// или сразу выводим значение
	return $thread->get('comments');
} else {
	// или записываем его в плейсхолдер
	$modx->toPlaceholder($toPlaceholder,$thread->get('comments));
}
Вызываем его перед местом использования (если вывод через плейсхолдер) или сразу в нужное место (если вывод напрямую).
// Если вывод через плейсхолдер, то указываем его
[[!CountComments? &toPlaceholder=`countComments`]]
Теперь вставляем плейсхолдер [[+countComments]] куда нужно.
Николай
29 августа 2015, 16:54
5
+1
Делал очень давно, сейчас бы сделал по другому, но что есть, то есть )

Сниппет adsense
<?php
//спустя сколько символов искать перенос строки и вставлять рекламу?
$nu = 3800;
//Код рекламы
$adsense = <<<HTML
<div class="sense">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:90px"
     data-ad-client="ca-pub-1233335915169539"
     data-ad-slot="2233378009"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
HTML;
$a = preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|</p>)@', "\\1$adsense\\2", trim($content), 1);
return $a;
Вызов (в шаблоне вместо [[*content]])
[[adsense? &content=`[[*content]]`]]
Пашок
15 ноября 2013, 10:20
1
0
Выкопал!

Схема:

Создаём плагин setNameForUserFromHybridAuth с кодом:
if($data['provider']['provider'] == 'Mailru') {
	$data['username'] = $data['email'];
	$data['provider']['displayName'] = $data['email'];
}

if($user->_fields['provider']['provider'] == 'Mailru') {
	$user->_fields['username'] = $user->_fields['email'];
	$user->_fields['provider']['displayName'] = $user->_fields['email'];
}
На события: OnBeforeUserFormSave, OnUserBeforeSave, OnUserFormSave, OnUserSave.