Александр Мельник

Александр Мельник

С нами с 02 сентября 2016; Место в рейтинге пользователей: #63

Кеширование, кеширование...

Наверное самая для меня непонятная тема в modx.
Столкнулся с тем, что даже добавление некой уникальной метки к js файлу, который подключен на страницу, не заставляет браузер получить его новую версию.
Подробности.
Базовый шаблон любой страницы.
<!DOCTYPE html>
<html lang="ru">
{include 'head.tpl'}

<body class="main-page">
    <div class="main-wrapper" i>

        {block 'header'}
        {/block}

        {block 'content'}
        {/block}

        {include 'footer.tpl'}
    </div>
    {include 'modals.tpl'}
    {include 'scripts.tpl'}
</body>
</html>
Все что здесь инлюдиться создано как статичные ресурсы.
Есть чанк scripts в котором есть
<script src="assets/a7/js/park.js?v=97.1"></script>
как видно у файла есть версия.
Однако если сменить версию,
Александр Мельник
05 августа 2022, 13:27
modx.pro
1
128
+1

А как получить префикс таблиц?

Добрый день.
Есть способ определить префикс таблиц в базе?
Вижу вот такой пример
$current_prefix = $modx->config['table_prefix'];
но у меня нет такой системной настройки.
Александр Мельник
12 июля 2022, 10:33
modx.pro
137
0

Очень глупый вопрос. А как вы используете синтаксис vue на страницах с fenom?

Хочу использовать на странице vue, но его синтаксис конфликтует с fenom.
Тоесть попытка сделать банальный
<div v-for="car in park">{{car.id}}</div>
убивает страницу из-за {{

Наверняка ведь я не первый столкнулся?
Про то что vue умеет в файловые компоненты и что это наверное решит проблему — знаю, но конкретно здесь не применимо, на хостинге нет node как таковой и не поставить.
Подключил vue самым банальным образом через cdn
Александр Мельник
30 июня 2022, 17:42
modx.pro
661
0

Не могу получить значение placeholder. Тонкости работы парсера?

Уверен, вы мне подскажите, потому что я наверное один не понимаю всех этих тонкостей и нюансов работы различных парсеров и выставления плэйсхолдеров.
В чем проблема.
Есть шаблон, создан как статичный документ.
Вот на скрине его содержимое.

В нем вызывается сниппет (на скрине отображены сразу все варианты вызова, но конечно же я запускал их по одному)
в этом сниппете выставляется плэйсхолдер.
Смотрите скрин.

А ниже в шаблоне я пытаюсь значение получить (там тоже много вариантов написано, но я применял их по одному конечно)
Данные могу получить только через стандартный шаблонизатор, а очень хочется работать с этим плэйсхолдером через fenom, поскольку в коде будет много проверок, условий на наличие тех или иных настроек и хочется использовать ifы foreachи и прочие прелести фенома.

Есть идеи как получить плэйсхолдер в переменную fenom?
Спасибо.
Александр Мельник
30 июня 2022, 11:55
modx.pro
158
0

Кешируются ли файловые сниппеты?

Использую файловые элементы pdoTools, в документации написано что
Файловые сниппеты не кэшируются, но можно включить кэширование скомпилированных шаблонов Fenom, используя настройку pdotools_fenom_cache.
У меня она отключена.
Есть шаблон для ресурса, в нем
{include 'file:templates/category.tpl'}
Внутри category.tpl
{extends 'file:templates/layout.tpl'}
{block 'page'}
{'@FILE filter/filteredProducts.php'|snippet}
{/block}
Внутри filteredProducts.php
echo "hello world";
В системных настройках отключил кеширование
Александр Мельник
03 апреля 2022, 11:45
modx.pro
265
0

и снова у меня проблемы с фильтрацией чисел

Добрый вечер.
Вроде бы уже не раз набивал на этом месте шишки, но видимо не достаточно)
Есть сниппет msProducts.
У него есть параметр
optionFilters Фильтры по опциям товаров. Передаются JSON строкой, например, {"optionkey:>":10}
Есть опция, называется m2, тип число, значение у товара = 1000
Вызов сниппета, с попыткой отфильтровать товары у которых m2 > 600 ничего не выводит, поскольку сравнение значение происходит не как число, а как строка и 600 становится больше 1000.
$result =  $modx->runSnippet('msProducts',[
    'parents'=>0,
    'optionFilters'=>'{"m2:>":600}',
    'tpl'=>'@INLINE <p>[[+pagetitle]]</p>',
    'showLog'=>1
]);
Часть SQL запроса в котором видно, что 600 передается как строка в кавычках
WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `Data`.`price` > '0' AND `m2`.`value` > '600' )
Я уже задавал подобный вопрос и мне любезно подсказали, что нужно смотреть в сторону sql метода CAST() для приведения строки к числу.
modx.pro/help/22471
Тогда я решил задачу другим способом, но сейчас решил все -таки попробовать CAST и честно говоря совсем не получилось.
Вот у Ильи
ilyaut.ru/cheats/sorting-on-tv-number-for-pdoresources/
есть пример
{'pdoResources' | snippet : [
  'tpl' => '@INLINE {$pagetitle} - {$price}',
  'sortby' => '{"CAST(`TVprice`.`value` AS DECIMAL(13,3))":"ASC"}',
  'includeTVs' => 'price'
]}
где в сортировке применяется CAST
Пробую у себя
Александр Мельник
31 марта 2022, 19:41
modx.pro
130
0

про viber, whatsapp и прочее

Нужны мне советы от более молодых и продвинутых коллег.
В жизни я не пользуюсь всеми этими миллионами мессенджеров и отсутствие этого опыта мешает мне сейчас как разработчику. Поэтому, если есть время — просветите меня пожалуйста.
Опишу задачу.
Есть сайт. у него есть менеджеры. Каждый менеджер регистрируется на сайте, вписывает свой номер мобильного. Сайт генерирует разные текстовые сообщения сообщения, их нужно отправить в viber и whatsapp каждому менеджеру, зная только его номер телефона. Есть условие — использование api напрямую, минуя всякие промежуточные сервисы.
1) я правильно понимаю, что
Александр Мельник
26 марта 2022, 15:03
modx.pro
308
0

google api для получения позиций в поисковой выдаче. Оно существует?

Господа и дамы, поделитесь пожалуйста, сталкивался ли кто то с возможностью получения позиции сайта по той или иной фразе в выдаче google?
Не через сторонние сервисы, а напрямую от google.
Буду благодарен за ссылку на информацию…
Александр Мельник
19 марта 2022, 20:44
modx.pro
237
0

Чем отличается переход по ссылке из письма от "скопировал, вставил, нажал enter"?

Хочу послушать мнение коллег.
Столкнулся с тем, что мое приложение ведет себя по разному, в зависимости от того, как перешли на страницу — из письма или просто вставив ссылку в браузер.
Немного подробностей.
Есть роут, который откликается на get запрос
$app->get('/c/{lang}/confirm/{hash}/',WelcomeController::class.":confirm");
При переходе на эту странице методом get происходит получение заключенного в ссылке хеша, получение пользователя и подтверждения его регистрации. Контроллер а вернее его метод, который обрабатывает этот роут имеет защиту, на случай если по хешу не удалось найти пользователя, выдает текст, что вы перешли по неверной ссылке.
Ссылка приходит пользователю в письме.
Все работает шикарно, если
Александр Мельник
02 февраля 2022, 20:14
modx.pro
179
0

Как кешировать фильтры?

Сразу хочу отметить, что речь не идет конкретно о modx и msearch2, вопрос в целом — об идеях, реализациях, опыте коллег.
Что собственно смущает.
К примеру есть страница, на которой условные товары. Есть фильтр с набором характеристик, к примеру есть
Размер
— s
— m
— x

Цвет
— белый
— черный
— красный

Бренд
— 1
— 2
-3
Какие варианты работы фильтра я вижу:
1) Вариант без кеширования. Любое изменение фильтра вызывает запрос на сервер, который вернет данные, соответствующие фильтру.
2) Кеширование первым пользователем. Когда пользователь что то выбрал в фильтре, отправляется запрос, получаются данные, кешируются. Когда этот же иди другой пользователь накликает в фильтре такую же комбинацию, данные будут отданы из кеша.
3) Полное предварительное кеширование. Кеш всех комбинаций фильтра готовиться заранее и даже первый клиент получает уже ответ из кеша.

Какие проблемы и недопонимания эти варианты вызывают:
1) С первым все более менее понятно. Будет работать, но если количество характеристик постоянно растет (на некоторых проектах у меня менеджеры вывели в фильтр уже 170 типов характеристик и у каждого типа не менее 10 значений) то «тормоза» неизбежны, как ты не оптимизируй и не используй индексы в базе.
2) Второй вариант лично мне кажется бесперспективным. Хотя по моему именно так кешируются большинство фильтров.
Александр Мельник
26 января 2022, 10:10
modx.pro
157
0