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

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

С нами с 01 июля 2013; Место в рейтинге пользователей: #33
25 марта 2017, 11:25
+2
Возможно, коллекция — не лучший инструмент для данной задачи, на случай, если статьи могут пересекаться для разных пользователей.

На мой взгляд, лучше реализовать задачу таким образом:
— у вас есть единый раздел с тикетами «Статьи»
— на главной страницы с помощью 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}
25 марта 2017, 11:17
3
+3
Если использовать минимальное количество запросов, то можно воспользоваться 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>
25 марта 2017, 10:31
+1
Избавьтесь от тега base, и все заработает.
24 марта 2017, 17:20
+1
Добрый день, готов взяться. Дизайнер в комплекте.
21 марта 2017, 13:18
+2
На правах предложения: может сделать аватарку в блоке «автор дополнения» кликабельной с переходом в профиль? Третий раз ловлю себя на попытке кликнуть по ней..)
21 марта 2017, 12:24
1
+4
Вариант 1:
в чанках заменить
href="[[+link]]"
на
href="/[[+link]]"

Вариант 2:
В системных настройках изменить параметр link_tag_scheme на full.

Вариант 3:
для сниппета pdoTools задать параметр &pageLinkScheme.
21 марта 2017, 01:28
+6
На самом деле, идея с опциональностью предоставляемой техподдержки звучит вполне интересно, равно как и старт отсчета таймера с момента первого запроса.

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

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

К слову, все это подводит к идее реализации независимой от автора техподдержки (процентно от стоимости дополнения как раньше, или «общую техподдержку» за отдельную стоимость).
20 марта 2017, 20:53
+2
Тогда выходит не совсем логично — англоязычный пользователь не может даже узнать о существовании дополнение (без языковой поддержки), чтобы для себя решить — хочет ли он установить его в таком варианте или нет.
20 марта 2017, 20:45
0
Вопрос: то, что сейчас при переключении языка пропадают все дополнения — это фича или ...?
20 марта 2017, 20:45
+1
Да, на 10-ке + Chrome с ними все тоже ок.
20 марта 2017, 17:25
+1
Ну, проблема довольно распространенная с имитацией скролла, согласен, но вполне решаемая:
— вот здесь (страница со скроллом / без скролла, попап по нажатию на кнопку «вход») я аналогичную ситуацию решил с помощью слегка модифицированного Magnific Popup'a + верстка html-контейнера со свойством box-sizing: border-box; (затрудняюсь сказать точнее, уже не помню полную реализацию)
20 марта 2017, 17:14
+2
Chrome, Windows 10, 1600x900, g.recordit.co/ObEaIYKtlV.gif (происходит как при открытии, так и закрытии)
20 марта 2017, 17:09
+4
Классно, сайт теперь выглядит куда интереснее..)

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

Также, вероятно, лишнее подчеркивание лупы при наведении:
16 марта 2017, 00:47
+2
1. Регистрируем плагин на событие OnManagerPageInit:
<?php
	if ($modx->event->name != 'OnManagerPageInit') return;
	$modx->regClientCSS('/design/admin.css');

2. В файле admin.css добавляем:
.x-form-item.modx-tv {padding-left: 0 !important;}
.modx-tv-reset {display: none !important;}
10 марта 2017, 00:20
1
+4
Лучше сделать так (в плагине):

меняем строку (в двух местах)
$modx->user->addSessionContext($modx->context->key);

на следующую
$contexts = $modx->getCollection('modContext', array('key:!=' => 'mgr'));

foreach($contexts as $context) {
	$modx->user->addSessionContext($context->key);
}
03 марта 2017, 11:09
0
<!--minishop2_popular <i class="glyphicon glyphicon-star" title="[[%ms2_frontend_popular]]"></i>-->
<!--minishop2_new <i class="glyphicon glyphicon-flag" title="[[%ms2_frontend_new]]"></i>-->
<!--minishop2_favorite <i class="glyphicon glyphicon-bookmark" title="[[%ms2_frontend_favorite]]"></i>-->
— с помощью этого.
02 марта 2017, 05:30
+3
Вы еще легко отделались: я последний ~месяц занимаюсь разработкой системы управления заказов минишопа — после продолжительного программирования теряю возможность нормально склонять и расставлять ударения в словах на какое-то время %)
02 марта 2017, 05:21
0
Не совсем понял, что именно нужно расписать…

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

Если вы хотите редактировать тикеты из дополнения Tickets, то:
1. создаете страницу для управления тикетами (допустим, news/admin), на которой вызываете сниппет TicketForm
2. прописываете в примере выше ссылку в следующем формате:
<a href="[[~айди_страницы_из_пункта_1]]?tid=[[*id]]"></a>
02 марта 2017, 03:59
1
+1
С помощью фильтров MODX'a:
[[!+modx.user.id:is=`[[*createdby]]`:or:memberof=`Administrator`:then=`Редактировать`]]

С помощью фенома:
{if $_modx->user.id | ismember : 'Administrator' || $_modx->user.id == $_modx->resource.createdby}
	Редактировать
{/if}