Aleksandr Huz

Aleksandr Huz

С нами с 02 августа 2014; Место в рейтинге пользователей: #21
Aleksandr Huz
01 мая 2018, 15:09
0
Вопрос был совсем не про штатный инструмент. И он генерирует точно такой же код, что я и написал выше. Тем более. что плагин можно сделать статичным и редактировать через свой любимый редактор.
Aleksandr Huz
30 апреля 2018, 18:24
0
Я узнал еще об одном способе)))
<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormPrerender':
        // Для ресурсов с индетификатором шаблона 2
        // а также для всех новых ресурсов ( $resource == null )
        if( $resource && $resource->get('template') == 2 || !$resource){
            $modx->regClientStartupHTMLBlock('<script>
        Ext.onReady(function() {
            	
             // Добавляем вкладку
                MODx.addTab("modx-resource-tabs",{title:"SEO",id:"seo"});
        
             // Прячем ненужные вкладки
        	MODx.hideRegion("modx-resource-tabs", "modx-panel-resource-tv");
        	MODx.hideRegion("modx-resource-tabs", "modx-resource-access-permissions");
            
             // Прячем ненужные поля
        	MODx.hideField("modx-panel-resource", ["modx-resource-content","description"]);
        	
             // Переносим TV на вкладку
        	MODx.moveTV(["tv32"], "seo");

        });
    </script>');
        }
        break;
}
Aleksandr Huz
05 апреля 2018, 15:38
0
Можно через плагин скрыть:
<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormPrerender':
        // Скрываем поле description, для ресурсов с индетификатором шаблона 2
        // а также скрываем поле для всех новых ресурсов ( $resource == null )
        if( $resource && $resource->get('template') == 2 || !$resource){
            $modx->regClientStartupHTMLBlock('
            <style>
                label[for=modx-resource-description],
                #modx-resource-description {
                    display:none!important
                }
            </style>');
        }
        break;
}
Aleksandr Huz
04 апреля 2018, 11:06
0
Основные поля лучше сохранять через событие OnBeforeDocFormSave
Получить поле контент:
$resource->getContent()
Сохранить:
$resource->setContent($output)
Aleksandr Huz
30 марта 2018, 14:10
0
Как вариант использовать pdoResources с использованием параметра &resources='5,6,7,8', а в чанке вызывать getImageList
Aleksandr Huz
30 марта 2018, 10:43
0
getTVValue — получение значения
setTVValue — запись нового значения
Aleksandr Huz
30 марта 2018, 10:38
+1
для этих целей есть сниппет getImageList
Aleksandr Huz
29 марта 2018, 16:56
0
Попробуйте вот так:
[[#5.tvname]]
или Fenom:
{5 | resource: 'tvname'}

где 5 — идентификатор ресурса
Aleksandr Huz
24 марта 2018, 20:26
0
Попробуйте тогда через дополнительное поле (tv).
Aleksandr Huz
24 марта 2018, 18:49
0
В статье написано:

Если цена товара меняется после прохождения через плагин-модификатор, то оригинальное значение помещается в old_price, а его значение уже больше никого не интересует.
и
Свойства old_price заменяется и его нигде не видно, кроме админки — напоминаю еще раз.
Может можно добраться до старой цены через $data
$data['old_price']
Aleksandr Huz
22 марта 2018, 18:48
0
да. Прочитайте статью
Aleksandr Huz
22 марта 2018, 18:16
0
Как-то все сложно.

Разве не можно, поменять цену через сниппет?
Примерно так:
if( $input == 0 ) return 0;
$input = floatval(str_replace(array(' ',','), array('','.'), $input));

// глобальный курс
$curs_global = $modx->getOption('ms2_curs_global');

// узнаем есть ли курс для данного товара
$product = $modx->getObject('msProduct', $id);
$curs = $product->get('curs') ?:  $curs_global;

// устанавливаем новую цену
$new_price = $input * $curs;

// форматируем цену и возвращаем ее
return number_format($new_price ,(floor($new_price) == $new_price ? 0 : 2),'.',' ');

и создаем плагин:
if($modx->event->name != 'msOnGetProductPrice') return;
$values = & $modx->event->returnedValues;
$resource = $modx->getObject('msProduct', $product->id);
$values['price'] = preg_replace('/\s/', '', $_REQUEST['price']);
Aleksandr Huz
18 марта 2018, 15:36
-1
Попробуйте после сохранения сбросить кеш:
$modx->cacheManager->refresh(array('system_settings' => array()));
Aleksandr Huz
14 марта 2018, 13:31
0
Попробуйте этот компонент — RefreshCache
Aleksandr Huz
24 января 2018, 18:55
0
пробовали вызвать AjaxForm некэшированным?
Aleksandr Huz
24 января 2018, 18:26
0
я имел ввиду, что если страница загружена по протоколу http а вы хотите получить файл по https то может быть 404 ошибка
Aleksandr Huz
24 января 2018, 17:02
1
+2
1. Вариант:
{foreach $orders as $order}
	{if order@last}
		{$order.cost}
	{/if}
{/foreach}
2. Вариант:
{var $total = count($orders) - 1}
{foreach $orders as $idx => $order}
	{if $idx == $total}
		{$order.cost}
	{/if}
{/foreach}
Aleksandr Huz
24 января 2018, 13:15
-2
Ну так может файл лежит в
http://example.com/assets/components/ajaxform/action.php
Aleksandr Huz
19 января 2018, 12:23
1
0
Написать сниппет или модификатор, если используется fenom.
Самый простой:
<?php
$arr= explode(',',input);
$result = [];
foreach($arr as $val){
    swicth ($val) {
        case: 'Лучшие': $result[] = 'best'; break;
        case: 'Аеро': $result[] = 'aero'; break;
        case: 'Все': $result[] = 'all'; break;
        default: $result[] = $val; 
    }
}
$output = implode(",", $result);
return $output;
Вызов:
[[!snippet? &input=`[[+tv.name]]`]]
Aleksandr Huz
19 января 2018, 12:01
0
Тогда я тоже поделюсь своим вариантом. Мне тоже нравится MinifyX, но сторонние библиотеки я подключаю отдельно. Надоело подключать их вручную, поэтому переместил все в MinifyX.

Добавил параметр
'modules' => 'jquery,lazysizes,magnific,sweetalert,slick'
а в сниппете:
$modules = $modx->getOption('modules', $scriptProperties, '', true);

$arr_modules = explode(',',$modules);
foreach ($arr_modules as $value){
    
    $moduleCss = $value . 'Css';
    $pathCss = $modx->getOption($moduleCss, $scriptProperties, '', true);
    if( $pathCss != '' ){
        $link = '<link rel="preload" href="'.$pathCss.'" as="style" '.'onload="this.rel='."'".stylesheet ."'".'"'.' >';
        $modx->regClientStartupHTMLBlock($link);
    }

    $moduleJs = $value . 'Js';
    $pathJs = $modx->getOption($moduleJs, $scriptProperties, '', true);
    if( $pathJs != '' ){
        $link = '<link rel="preload" href="'.$pathJs.'" as="script">';
        $script = '<script src="'.$pathJs.'" '.$attrJs.'></script>';
        $modx->regClientStartupHTMLBlock($link.$script);
    }
        	
    
}
Пути к файлам определяются в параметрах сниппета.