Максим Кузнецов

Максим Кузнецов

Был в сети 04 августа 2021, 21:51
Заказы принимаю
Возможно, коллекция — не лучший инструмент для данной задачи, на случай, если статьи могут пересекаться для разных пользователей.

На мой взгляд, лучше реализовать задачу таким образом:
— у вас есть единый раздел с тикетами «Статьи»
— на главной страницы с помощью MIGX вы реализуете таблицу вида:
айди_пользователя | привязанные_для_него_айди_статей

Далее, в шаблоне, где вы хотите отображать статьи для пользователя:

{if $_modx->user.id > 0}
	{set $migx_tv = $_modx->resource.migx_tv_name | fromJSON}
	//не помню точно, по какому полю формируется ключ в MIGX, возможно, получение статей для конкретного пользователя будет выглядеть чуть иначе
	{set $user_articles = $migx_tv[$_modx->user.id]}
	
	{$_modx->runSnippet('!pdoResources', [
		'resources' => $user_articles,
		...
	])}
{else}
    //форма авторизации
{/if}
Если использовать минимальное количество запросов, то можно воспользоваться fenom'ом примерно таким образом:

//Собираем ресурсы, из которых необходимо будет сформировать табы
{var $resource_list = $_modx->runSnippet('!pdoResources', [
	...
	'return' => 'json'
])}

//Родитель, от которого формируем табы
{set $tab_parent = '11'}

{set $tabs = ''}
{foreach $resource_list | fromJSON | split as $item}
	{set $parent = $item['parent']}
	{set $id = $item['id']}
	{set $pagetitle = $item['pagetitle']}

	//Настроить оформление по вкусу
	{if $parent == $tab_parent}
		{set $tabs = $tabs ~ '<a data-id="' ~ $id ~ '" class="tab-selector">' ~ $pagetitle ~ '</a>'}
	{else}
		{set $tab_childs[$parent][$id] = '<div class="body">' ~ $pagetitle ~ '</div>'}
	{/if}
{/foreach}


<div class="wrapper">
	<div class="tabs">{$tabs}</div>
	<div class="items">
		{foreach $tab_childs as $parent_id => $tab_content}
			<div data-parent="{$parent_id}" class="body">
				{foreach $tab_content as $tab_item}
					{$tab_item}
				{/foreach}
			</div>
		{/foreach}
	</div>
</div>
На самом деле, идея с опциональностью предоставляемой техподдержки звучит вполне интересно, равно как и старт отсчета таймера с момента первого запроса.

Возьмем для примера достаточно сложное (потенциально вызывающее вопросы) и в тоже время популярное дополнение: mSearch2. Ценник на него без учета скидок ~2000. Вычитаем 30% modstore — итого 1400 рублей идет автору.
Предположим, что час среднебюджетного программиста стоит 700 рублей. Итого 2 часа сведут на нет всю прибыль от дополнения, что вполне достижимо, учитывая, что для решения ~половины запросов потребуется внедрение в админку. И все это без учета того, что под одним ключом могут задавать вопросы с разных сайтов.

В итоге в текущей ситуации, с одной стороны, стимулируется написание хорошей документации, но с другой — повышение итоговой стоимости. На мой взгляд, все сведется ко второму, учитывая, что данный вопрос уже поднимался. Что в итоге делает менее выгодным реализацию больших дополнений (или покупателя отпугивает высокая цена, или объем вопросов — разработчика).

К слову, все это подводит к идее реализации независимой от автора техподдержки (процентно от стоимости дополнения как раньше, или «общую техподдержку» за отдельную стоимость).
Ну, проблема довольно распространенная с имитацией скролла, согласен, но вполне решаемая:
— вот здесь (
страница со скроллом / без скролла, попап по нажатию на кнопку «вход») я аналогичную ситуацию решил с помощью слегка модифицированного Magnific Popup'a + верстка html-контейнера со свойством box-sizing: border-box; (затрудняюсь сказать точнее, уже не помню полную реализацию)
Классно, сайт теперь выглядит куда интереснее..)

Из того, что сразу попалось на глаза:
На странице дополнения, при просмотре кол-ва загрузок (лупа) весь сайт передергивает (проблема со скриптом всплывающего окна и padding'a для имитации сдвига скролла).

Также, вероятно, лишнее подчеркивание лупы при наведении:
Вы еще легко отделались: я последний ~месяц занимаюсь разработкой системы управления заказов минишопа — после продолжительного программирования теряю возможность нормально склонять и расставлять ударения в словах на какое-то время %)
Не совсем понял, что именно нужно расписать…

1. У вас есть раздел с тикетами (допустим, новости), доступный по адресу '/news/'. Создаете в древе ресурсов новую страницу (не тикет), после чего перетаскиваете ее в раздел с тикетами, делая ее дочерней.
2. Изменяете алиас для страницы и создаете для нее отдельный шаблон.
3. Исключаете страницу из поиска и выборок pdoResources/getTickets по данному разделу.
4. Вызываете в шаблоне сниппет TicketForm c параметром &parents, равным айди раздела с тикетами.