Руслан Алеев

Руслан Алеев

С нами с 15 июня 2015; Место в рейтинге пользователей: #104
Александр
14 июля 2024, 12:55
6
+3
RewriteCond %{REQUEST_URI} ^/assets/images/products/[0-9]+/[^/]+\.(jpg|jpeg|png|gif|webp)$ [NC]
RewriteRule .* - [F]
Запрещает доступ ко всем изображениям в папке галереи товара, но не запрещает к вложенным в подпапках
Николай Савин
10 октября 2023, 07:39
1
+4
Позволю себе несколько замечаний.

1. Если заказов много — такой сниппет не сможет выполнить свою работу. Лучше вешать задачу на планировщик

2. Использование getCollection. Это не лучший вариант. Этот метод загружает в ОЗУ сразу всю коллекцию объектов заказа, что не лучшим образом отражается на производительности и ресурсах. Лучше использовать итератор через метод getIterator. Такой метод загружает в память только список объектов, при переборе по очереди достает из базы информацию. Этот метод существенно быстрее работает и кушает меньше ресурсов. К слову итератор это не изобретение MODX. Это паттерн PHP. Да и не только PHP — он почти во всех языках используется.

3. Это что за странная конструкция такая?
$modx->getOption('table_prefix')."ms2_order_addresses
Зачем так? Почему? Есть же гораздо более корректный метод обращения к таблице
$modx->getTableName('msOrderAddress');
Так-то люди вполне могут переименовать таблицу, просто указав нужное имя в модельке. И приведенный метод гарантировано выдаст нужную таблицу.

4. Использовать getChunk я бы рекомендовал так:

$pdoTools = $modx->getService('pdoTools');
$pdoTools->getChunk('name', $params);
Этот вариант, в отличие от $modx->getChunk обработает конструкции и MODX и феном.

5. Не ошибка. Даже не предупреждение. Скорее глаз режет.
Использование прямых SQL конструкций.

Мы же в MODX работаем. Желательно использовать конструктор запроса. newQuery — его не просто так придумали. Помимо универсальности запроса, не привязанного к конкретной СУБД — это еще и выглядит красиво, аккуратно, профессионально. Сразу видно, что человек знает свое рабочее место.
Андрей Шевяков
28 июля 2023, 11:26
3
+3
1) Создать плагин versions
<?php
switch($modx->event->name){
	case "pdoToolsOnFenomInit":
		$fenom->addModifier('versions', function($input){
			if(isset($input)) 
				return $input.'?v='.filemtime(MODX_BASE_PATH.$input);
		});		
		break;
}

2) Вешаем на событие pdoToolsOnFenomInit


3) Вызываем файлики так:
<link rel="stylesheet" href="{'/assets/templates/shop/styles/style.css' | versions}">
<script src="{'/assets/templates/shop/js/script.js' | versions}"></script>

У кого-то подсмотрел не помню точно. Но легко гуглится, сможете найти.
Пользуюсь много лет, ни разу не подвел.
Павел Романов
16 сентября 2020, 11:14
1
+2
Создайте плагин на событие OnManagerPageInit:
<?php
$modx->regClientCSS('..'.$modx->getOption('manager_url').'admin.css');

В директории manager создайте файл admin.css, где можете прописывать стили для админки.
Блок TV-шки, как правило находится в контейнере с id=«tv15-tr», где 15 — ID самой TV.
Соответственно, прописываете что-то типа:

#tv15-tr { padding:0 0 15px 0!important; margin:0 0 15px 0!important; border-bottom: 2px solid #ccc; }
Руслан Алеев
17 августа 2020, 16:26
4
0
Совместными усилиями пришли к работающему варианту:
[[!SimpleSearch?
&customPackages=`msProductData:article:minishop2:{core_path}/components/minishop2/model/:msProductData.id = modResource.id`
]]
Именно msProductData, а не msProduct. В :article: можно через запятую указать и другие поля, типа: :article,price,vendor: и т.п.
Евгений
16 марта 2019, 14:23
1
0
Ох давно это было… Сейчас поищу…
Сам сниппет (test) :)
<?php
$form = $modx->getOption('form',$scriptProperties,false);;
$tpl = 'list.tpl';
$tplOuter = 'outerlist.tpl';
$outputSeparator = PHP_EOL;
$output = array();

$where = array(
    'form' => $form
    );
    
$result = $modx->getCollection('FormItForm',$where);

foreach($result as $row){
    $items[] = (json_decode($row->get('values')));
};
$allCount = count($items);
foreach($items as $i){
    $output[] = $modx->getChunk($tpl,(array)$i);
    $pr_5 += ($i->five =='Да') ? '1' : '';
    $pr_12 += ($i->twelv =='Да') ? '1' : '';
    $pr_19 += ($i->ninethin =='Да') ? '1' : '';
}

$wrapper = implode($outputSeparator, $output);
$modx->toPlaceholder('all',$allCount,'');
$modx->toPlaceholder('pr_5',$pr_5,'');
$modx->toPlaceholder('pr_12',$pr_12,'');
$modx->toPlaceholder('pr_19',$pr_19,'');

return $modx->getChunk($tplOuter, array('wrapper' => $wrapper));
Вызов сниппета:
[[!test?
    &form=`Заявки на новый год`
]]
Чанк list.tpl:
<tr>
    <td>[[+name]]</td>
    <td>[[+phone]]</td>
    <td>[[+email]]</td>
    <td>[[+five]]</td>
    <td>[[+twelv]]</td>
    <td>[[+ninethin]]</td>
</tr>
Чанк outerlist.tpl:
<table>
    <tr><td>ФИО</td><td>Телефон</td><td>Почта</td><td>5.12</td><td>12.12</td><td>19.12</td></tr>
    [[+wrapper]]
    <tr style="border-top:2px solid #999;">
        <td colspan="3">Всего записалось - [[+all]]</td>
        <td class="text-center">[[+pr_5]]</td>
        <td class="text-center">[[+pr_12]]</td>
        <td class="text-center">[[+pr_19]]</td>
    </tr>
</table>
Вызов Formit:
[[!Formit?
    &hooks=`spam, email, formitsaveform`
    &formName=`Заявки на новый год`
    &formFields=`name,phone,email,five,twelv,ninethin`
    &formEncrypt=`0`
    &validate=`name:required`
    &emailTo=`you_pochta@yandex.ru`
    &emailTpl=`newYears.tpl`
]]
Чанк newYears.tpl:
Зарегистрировался:
ФИО - [[+name]]
Телефон - [[+phone]]
Почта - [[+email]]
5 - [[+five]]
12 - [[+twelv]]
19 - [[+ninethin]]
Комментировать побоюсь, но смысл был в записи желающих собраться на новый год попить пива с вариантами выбора даты сбора…
Где живет страничка кину в личку… У вас отключены сообщения :(
Tanya
07 октября 2015, 15:19
1
0
Спасибо за хорошие разъяснения! easyComm посмотрю, интересный. Tickets тут не нужен, очень он сложен для моей простой задачи(просто вывести то, что ввели через форму и всё!)
Пока сделала у себя так:
[[!FormIt?
&hooks=`...,SaveForm`
а в сниппете SaveForm создаю документ с именем одного введенного параметра и контентом — другого.:
<?php
$doc = $modx->newObject('modResource');
$doc->Set('parent',20); // в нужную мне папку
$doc->Set('template',9); 
$doc->Set('pagetitle',strip_tags($_POST['contact_name'])); 
$doc->Set('content', strip_tags($_POST['contact_message'])); 
$doc->Set('published','1'); 
$doc->Save(); 
return true;
возможно так не делают, но работает. Если это чем то чревато, то скажите чем… делать так не буду, а сразу рассмотрю easyComm