R2m0x94 (Vasily)

R2m0x94 (Vasily)

С нами с 07 мая 2018; Место в рейтинге пользователей: #362

Как снизить нагрузку при подсчете кол-во в pdoMenu дочерних ресурсов?

Всем известно, что есть
[[+children]]
при включенной настройке
&countChildren=`1`
Но
[[+children]]
не даёт, тот результат, так как меню двух уровневое и подсчет кол-ва вывожу в
&tplParentRow=`tpl.ParentRow`
Следовательно исходя из примеров
Вывожу в чанк родителя:
([[countChildren? &parent=`[[+id]]`]])
но, в pdoMenu количество вложенных ресурсов сильно нагружает сервер

сниппет countChildren, который вызывает нагрузку
<?php
$count = 0;
$parent = isset($parent) ? (integer) $parent : 0;

// Define Parents
$q = $modx->newQuery('modResource');
$q->select(array(
    'id',
    'parent'
));
$q->prepare();
$q->stmt->execute();
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);

$parent_ids = array($parent);
foreach ($res as $v) {
    if (in_array($v['parent'], $parent_ids) AND !in_array($v['id'], $parent_ids)) {
        $parent_ids[] = $v['id'];
    }
}

$q = $modx->newQuery('modResource');
$q->where(array(
    'parent:IN' => $parent_ids,
    'isfolder' => false,
    'published' => true
));
$q->select(array(
    'id'
));
$q->prepare();
$q->stmt->execute();
$count = count($q->stmt->fetchAll(PDO::FETCH_ASSOC));
$output = $count;
$modx->cacheManager->set($count, $output);

return (string) $output;
Есть ли менее нагружаемый скрипт, который делает всё тоже самое, кроме нагружаемости?
R2m0x94 (Vasily)
14 мая 2020, 12:45
modx.pro
569
+1

Output filter to get TV display name - tvLabel does not work on pdoResources

В бд попадают записи: GD, GL, GR и другие

Список одиночный выбор тв например Возможные значения
Гренада==GD||Гренландия==GL||Греция==GR||Грузия==GE
Два года назад уже кто-то задавал этот вопрос, но ответа на него не дали.

На выходе должно получится название страны типа «Греция», но выходит только «GR»
[[+tv.vendor_address:getTvDisplayName]]
[[#[[+id]].vendor_address:tvLabel]]
[[+tv.vendor_address:tvLabel]]
R2m0x94 (Vasily)
12 мая 2020, 12:25
modx.pro
1 155
+1

Как разбить результаты в mFilter2 на fenom по алфавиту?

Помогите пожалуйста в mFilter2 вывести структуру $results ресурсов по алфавиту такого плана:

Пробую разобрать результаты split и прочее, но что-то не складывается
{foreach [$results] as $key}
    {$_modx->setPlaceholder('key', $key)}
    [[-pdoResources?
        &parents=`[[*id]]`
        &showUnpublished=`1`
        &tpl=`outerV`
        &tvPrefix=``
        &limit=`0`
        &sortby=`{ "pagetitle":"ASC"}`
        &where=`{ "alias:=":"[[+key]]"}`
        &ki=`[[+key]]`
    ]]
{/foreach}
[[+key]]
Ещё попробовал второй способ кастомизировать сниппет mFilter2 и добавить туда строки такого плана
<?php
foreach ($resources as $k) {
    $character = mb_substr($k['pagetitle'],0,1);
    $tmp[$character][] = $k;
}

foreach ($tmp as $character => $resources) {
    $output .= $character;
}
Но результат перестаёт выполнятся # PHP warning: Illegal string offset 'results'

UPD:
Есть похожий вопрос, но как корректно стилизовать Snippet в mFilter2?
R2m0x94 (Vasily)
04 мая 2020, 18:11
modx.pro
481
0

Как запретить создавать раздел с тикетами для прав доступа к определённой группе пользователей?

Пожалуйста подскажите, как сделать запрет на возможность создавать раздел с тикетами?
  1. Первым делом я убрал из системных настроек.
    /*
    * [[!pdoPage?
    *     &element=`getTickets`
    * ]]
    * [[!+page.nav]]
    */
    {$_modx->runSnippet('pdoPage', [
        'element' => 'getTickets'
    ])}
    {$_modx->getPlaceholder('page.nav')}
  2. Далее отключил Редактор «markItUp», так как пользователи сайта знать не знают HTML.
  3. Затем пробовал настроить права пользователей (Настройка прав пользователей)
Но и это всё мне не помогло. Спасибо

Теги: Tickets, modAccessManager, class_key TicketsSection, Кастумная админка для Revo.
R2m0x94 (Vasily)
19 июня 2019, 18:42
modx.pro
539
0

Как на фронтэнде по двойному щелчку сменить название [[*pagetitle]] в таблице и при этом, чтобы изменения записались в базу?

Пример:
<table>
    <tbody>
    <tr>
        <td id="titlepagetable">[[*pagetitle]]</td>
    </tr>
    </tbody>
</table>
Пробую скрипку:
<script type="text/javascript">
/*
$(document).on('submit', 'form', function(e) {
    e.preventDefault;
    // -- Тут сериализация формы и ajax запрос
})
*/
// JS-ом ловим двойной клик по названию
$('#titlepagetable').dblclick(function(){
    // отображаем формочку с полем для ввода нового названия
    $(this).append('<input name="tdtable-titlepage" type="hidden" value="[[+pagetitle]]"/>'); // без кнопки
});
</script>
Но в базу не сохраняет :(
R2m0x94 (Vasily)
08 марта 2019, 17:21
modx.pro
819
0

MODX, PHP, SQL, JS - Как записать изменения пользователем в базу данных?

Эксперты MODX Revo помогите решить такую задачу:
На сайте есть таблица с уникальными [[+id]] товарами:
<table>
    <tr>
        <td>idx 1.</td>
        <td>id 54804.</td>
        <td id="titlepagetable">Смазочно-охлаждающие жидкости</td>
    </tr>
    <tr>
        <td>idx 2.</td>
        <td>id 54821.</td>
        <td id="titlepagetable">Шлифшкурки NORITAKE</td>
    </tr>
    <tr>
        <td>idx 3.</td>
        <td>id 54947.</td>
        <td id="titlepagetable">Шлифовальные круги и головки из CBN</td>
    </tr>
    <tr>
        <td>idx 4.</td>
        <td>id 55503.</td>
        <td id="titlepagetable">Алмазные круги и инструменты</td>
    </tr>
    <tr>
        <td>idx 5.</td>
        <td>id 55504.</td>
        <td id="titlepagetable">Шлифовальный инструмент</td>
    </tr>
</table>
надо записать конкретно в [[+pagetitle]]
<td id="titlepagetable">
изменения, например по двойному щелчку вместо «Шлифовальный инструмент» -> «Шлифовальный инструмент для пробоподготовки»

Подскажите как написать плагин для того, чтобы была возможность сохранять изменения пользователем в базу данных на прямую со страницы где вывод этих товаров этой таблицы?

contenteditable=«true» — это только html песчинка в море морфологии php.
R2m0x94 (Vasily)
22 февраля 2019, 16:46
modx.pro
840
0