Тодор

Тодор

С нами с 08 мая 2018; Место в рейтинге пользователей: #225
Тодор
03 декабря 2021, 17:13
+1
if(empty($resource->get('content')) && empty($resource->getTVValue('video') && $resource->get('template')==2){
}
Тодор
01 декабря 2021, 14:59
+1
Провери отрибут base в head, он должен меняться в зависимости от языка
<base href="modx.pro/">
<base href="modx.pro/ru/"> - RU
Тодор
01 декабря 2021, 14:16
+1
switch($modx->event->name){
    case 'OnDocFormSave':
        //$mode //$resource //$id
        if(empty($resource->get('content')) && $resource->get('published')){
            $resource->set('published', 0);
            $resource->save(); //Не уверен что это надо
        }
        break;
}
Тодор
29 ноября 2021, 15:38
1
0
foreach($data as $item){
    /*
    $item = array(
        [name] => Название поризводителя
        [resource] => 
        [country] => 
        [logo] => images/logo.png
        [address] => 
        [phone] => 
        [fax] => 
        [email] => 
        [description] => 
    )
    */
    $vendor = $modx->newObject('msVendor', $item);
    $vendor->save();
}
Тодор
29 ноября 2021, 15:32
0
Я если мне нужно значение языка в js, то я в теге html прописую cultureKey
...
<html lang="[[++cultureKey]]">
...
потом в js обращаетесь к этому зачению
var lang = $('html').attr('lang');
Тодор
25 ноября 2021, 00:08
0
$order = $modx->getObject('msOrder', $orderID);
$prop = $order->Address->get('properties');
Тодор
24 ноября 2021, 23:52
0
1. если указать пустой emailTpl — прийдет от такой емейл:

2. И все таки стандарным хуком email невозможно обработать переменную типа array — так как в field будут передан не масив со значениями, а строка «ArrayArrayArray», надо либо изменить нейми инпутам или сделать свой хук
Тодор
24 ноября 2021, 23:23
0
Абсолютно все данные о заказе (вроде):
$order = $modx->getObject('msOrder', $orderID);
$output = array(
    'order' => $order->toArray(),
    'user' => $order->User->toArray(),
    'profile' => $order->UserProfile->toArray(),
    'address' => $order->Address->toArray(),
    'delivery' => $order->Delivery->toArray(),
    'payment' => $order->Payment->toArray(),
    'status' => $order->Status->toArray(),
    'products' => []
);
foreach($order->Products as $product){
    $output['products'][] = $product->toArray();
}

print_r($output);
Тодор
24 ноября 2021, 17:50
0
Не такое естетическое решение как у вас, но можно воспользоваться стандарными полями MODX

В результате можно обращаться к этим полям вот так:
$profile = $modx->getObject('modUserProfile', $userID);
print_r($profile->get('extended'));
/*
array(
    [2021-11-09] => array(
        [0] => +10
        [1] => -7
        [2] => -3
    )

    [2021-11-09 16:05:56] => -7
    [2021-11-09 18:59:03] => -3
    [2021-11-09 22:18:32] => +10
)
*/
Тодор
24 ноября 2021, 17:13
0
Вроде пропущено закрыкающие скобки после :date=`%d.%m.%Y`
[[+price_bron
    :is=`0`:then=``
    :else=`<a href="[[~[[pdoResources?&parents=`[[*goraID]]` &depth=`0` &templates=`61` &returnIds=`1`]]]]?date_start=[[+start:strtotime:date=`%d.%m.%Y`]]&date_end=[[+finish:strtotime:date=`%d.%m.%Y`]]" target="_blank" class="button button-green">Забронировать</a>`]]
Тодор
24 ноября 2021, 17:05
0
У твоих инпутов очень странные нейми.
Должно быть чтото типа:
Name: [[+field.0.name.0]]
Email: [[+field.1.email.0]]
Phone 1: [[+field.2.phone.0]]
Phone 2: [[+field.3.phone.0]]
Data Start: [[+date_start]]
Date End: [[+date_end]]
Не уверен что все правильно, но date_start и date_end точно должно работать (если они конечно не пустые).
Еще можно попробовать в emailTpl поставить несущесвующий чанк і посмотреть на то что прийдет на почту, там должны быть все доступные в чанке переменные
Тодор
10 ноября 2021, 18:57
0
Можно удалить все локализации и создать их заново в той последовательности которой тебе надо, либо изменить немножко код:
<?php
$pdo = $modx->getService('pdoTools');

$uri = $_SERVER['REQUEST_URI'];
if(substr($uri, 0, 1)) {
    $uri = mb_substr($uri, 1);
    $tmp = explode('/', $uri);
    if($path = $tmp[0]) {
        $tmp = $modx->getObject('localizatorLanguage', array('http_host:LIKE' => "%/{$path}/"));
        if($tmp) {
            $uri = str_replace("{$path}/", "", $uri);
        }
    }
}

$protocol = 'https://';
$languages = $modx->getIterator('localizatorLanguage', ['active' => 1]);
$output = [];
foreach($languages as $language) {
    if(mb_substr($language->http_host, -1) == '/') {
        $placeholders = array(
            'cultureKey' => $language->key,
            'active' => $language->key == $modx->localizator_key? 'active': '',
            'url' => $protocol. $language->http_host. $uri,
        );
    } else {
        $placeholders = array(
            'cultureKey' => $language->key,
            'active' => $language->key == $modx->localizator_key? 'active': '',
            'url' => $protocol. $language->http_host. '/'. $uri,
        );
    }
    
    $output[$language->key] = $pdo->getChunk($tpl, $placeholders);
}

uksort($output, function($a, $b) {
    $order = array(
        "ru", "uk", 'en', 'it', 'fr' //Твоя последовательность языков
    );
    return array_search($a, $s) > array_search($b, $order);
});
return implode('', $output);
Тодор
03 ноября 2021, 17:46
0
{for $counter=1 to=31 step=3}
    {$counter}
{forelse}
    ELSE
{/for}
Тодор
30 августа 2021, 09:46
0
Смотришь в системных настройках на «tree_default_sort», какое там значение по нему и делаш сортировку
Тодор
19 августа 2021, 13:49
0
Есть предложение на счет сниппета msOrder. Для авторизованных пользователей при заходе на страницу с msOrder подтягиваются поля из личного кабинета — это все очень хорошо, но если пользователь изменил какое-то поле например city то после перезагрузки страницы, данные перезаписуться на те которые сохранены в кабинете. Предлагаю переделать 152 срока на:
$value = $order[$value] ?: $profile[$value];
Тодор
18 августа 2021, 14:06
0
{if in_array($id, [100, 150, 154])}
    <a href="{$uri}">{$pagetitle}</a>
{else}
    {$pagetitle}
{/if}
только может быть такое что модыфикаторы не сработають для tpl — @INLINE и надо будет создавать отдельний чанк для этого
Тодор
17 августа 2021, 15:29
0
Создаеш TV, с типом ввода — Список (множественный выбор)
В поле вожможные значения пишеш чтото такое
@EVAL return $modx->runSnippet('msProducts', array(
    'parents'=>$parentID,
    'where'=>'{"Data.price:>=":"150"}',
    'limit'=>0,
    'sortby'=>'{"pagetitle":"ASC"}',
    'tplOuter'=>'@INLINE [[+output]]',
    'tpl'=>'@INLINE [[+pagetitle]]==[[+id]]',
    'outputSeparator'=>'||'
));
А при выводе на сайте береш значение твоей TV и передаеш в pdoResources
{'!pdoResources' | snippet:[
    'parents' => 0,
    'limit' => 0,
    'resources' => $_modx->resource.your_tv_field,
    'tpl' => '@INLINE <a href="{$uri}">{$pagetitle}</a>'
]}
я только не помню точно ставит ли «Список (множественный выбор)» — какой-то свой разделитель между значениями, если ето не "," то надо будет заменить розделитель
Тодор
11 августа 2021, 16:37
0
Вставить в контент визов чанка
[[$productCart?id=`59`]]
или снипета
[[productCart?id=`59`]]