• Как к числу добавить процент в XML документе?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    [[*TVname:mpy=`1.15`]]
    Ответ написан
  • Как изменить отдельный пункт меню modx?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Можно сделать так.
    В параметре tpl сниппета указать имя чанка, а в самом чанке написать код с проверкой на id ресурса и если совпадает, то подставить класс.
    [[pdoMenu?
        &tpl=`topMenuItem.tpl`
        ...
    ]]

    Чанк topMenuItem.tpl:
    <li class="header__nav-item[[+id:is=`id_ресурса_Туры_с_кэшбеком`:then=` special-class`]]">
         <a href="[[+link]]" class="header__nav-link link_btn">[[+menutitle]]</a>
         [[+wrapper]]
    </li>


    P. S. Если хотите ответ по коду, то показывайте код в текстовом формате, а не картинкой.
    Ответ написан
    3 комментария
  • Как в modx выводить дату+n дней?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Можно создать лишний сниппет (для MODX это лишнее обращение к базе данных), а можно воспользоваться модификаторами вывода, которые могут очень многое и это тоже:
    [[+phx:input=`+7 day`:strtotime:date=`%d.%m.%Y`]]
    Форматы даты модификатора date.
    Ответ написан
    Комментировать
  • Modx Revo api как сделать статус онлайн/оффлайн в выборке пользователей?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Сергей Миллер, к сожалению в MODX нет решения «из коробки» для показа онлайн ли пользователь. Так как у Вас желание сделать именно через API, а не сторонними дополнениями (UsersOnline), то придется постараться. Для начала надо определить, что значить «пользователь онлайн»? Ведь могут быть различные варианты поведения. Пользователь открыл страницу сайта и отошел от компьютера, не закрывая браузера, или переключился на другую вкладку. Он онлайн? Или открыл страницу и сразу закрыл браузер, как узнать что он уже не онлайн. Самый простой и наверное самый распространенный способ, это хранить в базе данных точное время последней загрузки любой страницы пользователем и считать, что если это произошло недавно (минут 5 или 10 назад), то пользователь еще активен.
    Для этого создадим плагин, например userLastAction и подключим ему системное событие OnLoadWebDocument (код отчасти взят у Василия Наумкина):
    <?php
    switch ($modx->event->name) {
    	case 'OnLoadWebDocument':
    		// Сохраняем дату открытия любой страницы сайта, если пользователь авторизован
    		if ($modx->user->isAuthenticated($modx->context->key)) {
    			// Здесь мы работаем с текущим пользователем — у него профиль уже загружен
    			$profile = $modx->user->Profile;
    			// Сохраняем дату и время в поле факс (а зачем еще это поле?) профиля пользователя
    			$profile->set('fax', date('Y-m-d H:i:s'));
    			$profile->save();
    		}
    		break;
    }


    Теперь при открытии любой страницы сайта любым пользователем будет сохранятся точное время этого действия, привязанное к профилю пользователя. Остается только при формировании списка проверять, давно ли он пользователь совершал действие на сайте.
    Я например писал такой сниппет userOnline:
    <?php
    $output = '';
    // Если есть ID пользователя
    if ($input) {
        $userId = (int)$input;
        // Если в параметрах не установлено через какое количество секунд считать пользователя "офлайн", то берем 10 минут
        $idleTime = $options ? (int)$options : 600;
        // Получаем объект пользователя по ID
        $user = $modx->getObject('modUser', $userId);
        if (!empty($user)) { // Если пользователь существует, то...
            // Получаем его профиль
            $profile = $user->getOne('Profile');
            // Получаем время его последнего действия
            $userLastAction = $profile->get('fax');
            if (!empty($userLastAction)) {
                // Если есть время в базе, то проверяем меньше ли оно установленного нами времени признания пользователя активным
                if (date('U') - date('U', strtotime($userLastAction)) < $idleTime) {
                    // Если да, будем выводить слово "online"
                    $output = 'online';
                } else {
                    // Если нет, то — время его последнего действия
                    $output = $userLastAction;
                }
            }
        }
    }
    // Выводим результат
    return $output;

    Вам придется это еще переработать под себя.
    Ответ написан
    1 комментарий
  • GetObject в MODX EVO возвращает null как решить?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    В Evo API отличается от API MODX Revo.
    Здесь для получения информации о веб-пользователе надо использовать getWebUserInfo.
    Ответ написан
    Комментировать
  • Как в Modx Revo вывести всех пользователей определенной группы?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Если известно, что пользователи состоят только в этой группе или это их главная группа, то тут всё легко.
    $groupName = 'boys';
    //Получаем ID группы
    $groupId = $modx->getObject('modUserGroup', array('name' => $groupName))->get('id');
    
    //Получаем коллекцию объектов пользователей с выборкой по группе
    $users = $modx->getCollection('modUser', array('primary_group' => $groupId));
    
    foreach ($users as $user) {
        
    }

    А вот если пользователи могут состоять в нескольких группах и список нужен не по главной группе, то тут немного сложнее...
    $groupName = 'boys';
    //Получаем ID группы
    $groupId = $modx->getObject('modUserGroup', array('name' => $groupName))->get('id');
    
    //Получаем коллекцию объектов групп пользователей с выборкой по группе
    $userGroupMembers = $modx->getCollection('modUserGroupMember', array('user_group' => $groupId));
    
    //прогоняем коллекцию через цикл
    foreach ($userGroupMembers as $userGroupMember) {
    
    //Получаем объект пользователя через объект группы
        $user = $userGroupMember->getOne('User');
    
    //Делаем с объектом пользователя, что пожелаем...
    }
    Ответ написан
  • Как сделать условие активации и деактивации кнопки?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Попробуйте лучше такой вариант, он правильный и очень лаконичный:
    <a href="[[+tv.file-download]]" class="btn btn-success btn-sm[[+tv.file-download:empty=` disabled" tabindex="-1" aria-disabled="true`]]"><i class="fas fa-download"></i> Скачать</a>
    Ответ написан
    Комментировать
  • Почему не выводит getimagelist из редактора ресурса?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Сделайте вызов сниппета некэшируемым:
    [[!getImageList? 
            &tvname=`gallery`
            &docid=`[[+id]]`
            &tpl=`@CODE:
            <div class="item">
              <img src="[[+image]]" alt="" width="844" height="531">
            </div>`
            &tvname=`img-slide`
            ]]
    Ответ написан
    Комментировать
  • Как в ModX посмотреть исходный код всей страницы?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Можно попробовать посмотреть в кэше:
    /core/cache/resource/web/resources/[id ресурса страницы].cache.php
    Ответ написан
    Комментировать
  • Как по id в чанке проверить не удален ли ресурс?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Можно попробовать таким образом.
    Сначала сниппетом getImageList создаем список id ресурсов через запятую:
    [[!getImageList?
        &tvname=`migx_recommended_brands`
        &tpl=`@CODE: [[+brand]]`
        &toPlaceholder=`kakoytoplaceholder`
        &outputSeparator=`,`
    ]]

    Инструкция по параметрам getImageList.

    А потом используем для вывода сниппет pdoResources, который отфильтрует неопубликованные и удаленные.
    [[!pdoResources?
        &parents=`0`
        &depth=`0`
        &resources=`[[+kakoytoplaceholder]]`
        &tpl=`recommended_service`
        &includeTVs=`preview_image`
    ]]


    Чанк recommended_service:
    <div class="col-md-6 mb-base col-xl-3" style="">
        <a class="brand" href="[[~[[+id]]]]">
            <span class="brandtext">[[+pagetitle]]</span>
            <img class="img-fluid" src="[[+tv.preview_image:pThumb=`&w=250&h=200&zc=0`]]" alt="">
        </a>
    </div>


    Но, если бы это был мой проект, то я бы прежде попробовал написать свой сниппет, который сначала проверял TV migx_recommended_brands: удалял бы там id несуществующих ресурсов, отфильтровывал неопубликованные и самостоятельно делал бы вывод.
    Ответ написан
    2 комментария
  • Как вывести MIGX внутри MIGX в MODX?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Возможно проблема в фильтре вывода.
    Попробуйте эту конструкцию
    [[+tiles:isnot=``:then=`
      <div class="tiles-block">
        [[getImageList?
          &value=`[[+tiles]]`
          &tpl=`tiles-tpl`
        ]]
      </div>
    `]]

    поменять на
    [[getImageList?
        &value=`[[+tiles]]`
        &tpl=`tiles-tpl`
        &wrapperTpl=`@CODE:<div class="tiles-block">[[+output]]</div>`
    ]]
    Ответ написан
  • Modx. Как заставить GetImageList работать с параметом where?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Попробуйте использовать двойные кавычки вместо одинарных:
    &where=`{"idx":"1"}`
    Ответ написан
    8 комментариев
  • Виртуальная страница ModX?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Виртуальные страницы можно сделать при помощи дополнения MODX Fast Router.
    Адреса можно сделать например так:
    site.dm/users/{name}
    где {name} будет именем пользователя (username);
    или
    site.dm/users/{id:[0-9]+}
    тут id пользователя.
    Для получения id или имени пользователя надо будет написать свой сниппет по инструкции.
    А информацию проще всего будет выводить сниппетом Profile из дополнения Login.
    Ответ написан
    Комментировать
  • Как написать условие на ModX?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    <img src="[[!+modx.user.id:userinfo=`photo`:empty=`/assets/img/profile.jpg`]]" class="img-fluid rounded-circle border shadow" alt="[[+username]]">
    Ответ написан
    Комментировать
  • Почему не работает этот код ModX?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    У ресурса есть поле createdby.

    В MODX есть фильтры ввода-вывода и модификатор UserInfo.

    Следовательно на странице ресурса лучше выводить так:
    [[*createdby:userinfo=`username`]]

    А в списке ресурсов (через pdoResources) — так:
    [[+createdby:userinfo=`username`]]
    Ответ написан
  • Как вывести URL child элемента в collections?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Тег [[*alias]] (со звездочкой) выводит псевдоним ресурса на котором он вызывается. То есть если вы выводите этот его на главной странице сайта, то там и будет index.
    Если же вы хотите вывести ссылку на ресурс через getPage (getResources), то надо делать так, как написал Руслан <a href="[[~[[+id]]]]" class="d-table-cell">.

    P. S. Collections тут не причем, он служит для организации дочерних ресурсов в админке сайта и на внешнюю часть сайта никак не влияет.
    Ответ написан
    Комментировать
  • Как изменить название значений в formit?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Попробуйте как-то так:
    [[!FormIt?
        ...
        &fieldnames=`name==Имя, phone==Номер телефона`
    ]]

    Официальный мануал.
    Ответ написан
    Комментировать
  • Почему при авторизации в админку modx evo страница просто обновляется?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    Проблема именно в том, что в базе данных нет таблицы modx_session.
    Ответ написан
  • 2 AjaxForm на одной странице MODX Revolution?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    В теге form параметр action указан на домашнюю страницу сайта, а надо, что бы обработка шла на текущей странице:
    <form action="[[~[[*id]]]]" ...>

    Первая форма срабатывает так как сниппет (обработчик) AjaxForm этой формы есть на всех страницах, в том числе и на домашней.
    Ответ написан
    Комментировать
  • Не могу найти указанный ключ формы?

    alelunegov
    @alelunegov
    Фрилансер. Разработка сайтов на MODX, верстка
    photosho, у кнопок отправки форм также нужен атрибут name равный submitVar в Formit (AjaxForm).
    [[!AjaxForm?
      ......
      &submitVar=`form1`
    ]]
    <form method="post" action="[[~[[*id]]]]" id="form-1">
      .......
      <input type="submit" name="form1" class="btn" value="Отправить" />
       .............
    </form>
    [[!AjaxForm?
      ......
      &submitVar=`form2`
    ]]
    <form method="post" action="[[~[[*id]]]]" id="form-2">
      .......
      <input type="submit" name="form2" class="btn" value="Отправить" />
      .............
    </form>

    Если вместо <input type="submit"> применяете <button type="submit">Отправить</button>, то в форме можно добавить скрытое поле:
    <input type="hidden" name="form3" value="1" />
    Ответ написан
    Комментировать