Zulya

Zulya

Был в сети 16 февраля 2025, 00:22
Заказы не принимаю
Наумов Алексей
Наумов Алексей
У вас несколько вариантов:
1. Указать в параметре threads строку с нужными вам цепочками, например resource-5,resource-6,resource-7, где 5,6,7 — как раз те самые дочерние страницы. Но этот способ нормально будет работать только если таких страниц не так много, 5..10..100.
2. Изначально можно изменить способ формирования параметра thread, например сделать его вида category-2-product-5, тогда можно делать запрос вида thread LIKE 'category-2-%'. Но тоже, если тысячи товаров, то LIKE может быть не быстрым.

Если речь о тысячах товаров — нужно придумывать что-то другое, я бы рассмотрел возможность добавления какой-нибудь колонки в таблицу modx_ec_threads, куда бы записывались данные, по которым фильтровать удобно. В вашем случае колонка category со значением 2.
Zulya
Zulya
Благодаря помощи Артура Шевченко, нашли причину.

Решение:
У меня на сайте было 2 контекста.
При регистрации с автологином, юзер почему-то привязывался к контексту web. Но у меня контекст web был пустой и не использовался. Поэтому в сниппете Register, добавила параметр
&authenticateContexts=`web,meb`
.
После этого, авторизованный пользователь получил доступ к оценкам тикетов, комментариев, добавление в избранное.
Артур Шевченко
Артур Шевченко
Можно, только нужно создать css класс, который будет управлять видимостью элементов, если такого класса еще нет, например «d-none», и блоку с формой и блоку с табами добавить условия. Для формы
[[!+modx.user.id:isloggedin:isnot=`1`:then=`d-none`]]
для табов
[[!+modx.user.id:isloggedin:is=`1`:then=`d-none`]]
Ну и в JS на событие «afl_complete» если response.success и ['regForm', 'authForm'].includes(form.id) переключать классы.
Zulya
Zulya
Артур, подскажите пожалуйста, с помощью AjaxFormitLogin возможно ли без перезагрузки страницы после отправки формы на той же странице отобразить TicketForm?
На странице добавления вопроса в шаблоне я разместила следующий код:
[[!+modx.user.id:isloggedin:is=`1`:then=`[[$addquestion]]`:else=`[[$authregtabs]]`]]
Когда посетитель не авторизован на сайте, ему отображается табы. Когда посетитель авторизуется/регистрируется, то сейчас страница перезагружается и потом отображается [[$addquestion]] со сниппетом TicketForm. А без перезагрузки страницы, даже после успешной авторизации/регистрации TicketForm не появляется, а остается формы в табах.
Артур Шевченко
Артур Шевченко
Если хотите разобраться то вот и вот история моих изысканий на эту тему. Всё это в итоге переросло в компонент AjaxFormitLogin, поддержку которого я прекратил, потому что решил полностью переписать JS и PHP, которые достались мне по наследству от AjaxForm. Однако весь функционал из AjaxFormitLogin перекочевал в новый компонент SendIt. Он полностью готов и отлажен. Сегодня я закончил написание документации. Думаю в понедельник или во вторник он станет доступен для скачивание через менеджер пакетов в modstore.
Zulya
Zulya
Надеюсь, кому-нибудь пригодится. Оказывается если в ТВ стоит значение по умолчанию, то при нем tvFilters не будет работать, даже после сохранения и смены на другое значение, не пишется в бд. Я убрала значение по умолчанию, и вручную указала значения ТВ в ресурсах. После все сработало.
Zulya
Zulya
Здравствуйте!
Когда я добавляю &tvFilters=`companytype==mfo` к запросу pdoResources, то ничего не выводит, убираю tvFilters, снова выводит список ресурсов. Подскажите пожалуйста, где моя ошибка, почему tvFilters не работает? Спасибо!

[[pdoResources:default=`Ничего не найдено`?
			&parents=`47`
			&includeTVs=`address,tel,logo,companytype`
			&tvFilters=`companytype==mfo`
			&processTVs=`1`
			&limit=`10`
			&loadModels=`easycomm`
			&where=`{"class_key":"modDocument"}`
			&leftJoin=`{
			"ecThread": {
			"class": "ecThread",
			"on": "modResource.id = ecThread.resource"
						}
					   }`
			&select=`{
			"modResource": "*",
			"ecThread": "ecThread.rating_simple AS rating, ecThread.count AS reviews"
				}`
			&tpl=`topcompanies`
			&sortby=`{"rating":"DESC", "reviews":"DESC"}`
			]]