Владимир Бабусенко

Владимир Бабусенко

С нами с 11 ноября 2014; Место в рейтинге пользователей: #189
Владимир Бабусенко
01 февраля 2016, 23:38
+1
Вот навалял, Выводит категорию, подкатегорию и 3 ресурса
[[!pdoMenu?
    &parents = `1`
    &level = `2`
    &displayStart = `1`
    &levelClass = `level`
    &firstClass =``
    &lastClass = ``
    
    &tplOuter = `@INLINE    <div class="out">[[+wrapper]]</div>`
    &tplParentRow = `@INLINE    <div class="block-cat">
                                        <p>[[+menutitle]]-Подкатегория</p>
                                    [[+wrapper]]
                                </div>`
    &tplInner = `@INLINE    <div class="items">
                                [[+wrapper]]
                            </div>`
    &tplInnerRow =  `test`
   
]]
Чанк «test», т.к. фильтры обязательно в чанк. В нем прописанно кол-во выводимых ресурсов, в данном случае 3.
[[+classes:is=`class="level3"`:then=`
    [[+idx:islte=`3`:then=`
        <div><a href="">[[+menutitle]]-Ресурс</a></div>
    `]]
`]]
Владимир Бабусенко
01 февраля 2016, 22:36
0
Сорри, хотел ответить Максиму Кузнецову. Это для него.
Почему? Можно например использовать &levelClass, и по нему определять какой уровень вложенности с помощью фильтров.
Владимир Бабусенко
01 февраля 2016, 22:34
0
Возможно сделать такое на pdoMenu без стороних снипетов. Посмотри мою недавную тему, она очень похоже на твою, за исключением того, что мне подкатегории >3 нужно было оборачивать в див. В твоем случае просто ничего не выводить.
modx.pro/help/7710/
Возникнут вопросы пиши.
Владимир Бабусенко
29 января 2016, 12:56
0
Не пробовал, думаю не помогут никакие такие манипуляции и countChildren будет считать все вложения, независимо от того как мы будем ограничивать, соответственно выдавать не тот результат. Написал свой сниппет, но мое любопытсво взяло вверх, и попробовал все таки через pdoMenu.
Решил по другому с помощью idx и class=«last»
В обертеке (&tplInnerRow) подкатегории сделал на них проверки.
Перед оборачивание проверял если idx = 4 открывал <обертка>
после оборачивания проверял если класс last, то проверяем еще что idx >3(что бы не закрыть того чего не открывали) тогда закрываем </обертка>

Вроде красиво получилось…

[[+idx:is=`4`:then=`<div class="display-none">`]]

<div class="item">
    <a href="[[+link]]" class="solid">[[+menutitle]]</a>
</div>

[[+classes:is=`class="last"`:then=`
	[[+idx:gt=`3`:then=`
		</div>
		<a href="" class="dotted show-user" data-alt="Скрыть">Все подкатегории</a>
	`]]
`]]
Владимир Бабусенко
29 января 2016, 10:02
0
Эх… не долго счастье длилось. К сожалению данное решение не подойдет. А причина в countChildren. К сожалению он считает все вложеные ресурсы, а не те которые мы выбираем в pdoMenu. При наполнение подкатегорий товарами, children всегда будет возвращать большее значение, чем нам нужно.
Владимир Бабусенко
27 января 2016, 13:16
0
Павел, в общем предложенное решение работает. Причина почему у меня не срабатывало, была в том что я прописывал фильтры в @INLINE. После как вынес html в чанки фильтры сработают. Спасибо за помощь.
Владимир Бабусенко
26 января 2016, 14:59
0
В принципе если решения на pdoMenu не будет, то так и придется…
Владимир Бабусенко
26 января 2016, 14:55
0
Павел, вчера вначале именно так и пытался сам сделать, но у меня что не сработало. Попробую еще раз. Спасибо.
Владимир Бабусенко
07 декабря 2015, 15:51
+1
Блин, стоит написать вопрос, как вопрос разрешился… надо было раскомментировать строку в build.config.php define('BUILD_EVENT_UPDATE', true);

Извините за беспокойство…
Владимир Бабусенко
22 августа 2015, 11:38
0
Вы не совсем понимаете суть транзакций. Их, как правило, используют для одновременного изменения нескольких записей. И если одну из операций выполнить не удалось, то нужно откатить уже проведенные. В вашем примере они не причем.
Не я понимаю, что транзакция имеет 2 варианта, либо полностью выполняется, либо ничего не выполняет. Я думал что там есть какой то механизм блокировки для работы с одной записью.
1. Сначала получить количество голосов, увеличить на 1 и записать в переменную.
В том то и дело, что теоретически, между получением и записью, другой пользователь тоже получит старое значение и увеличит. Практически получится увеличение на единицу, а должно на две единицы. Это не вариант.
П.С. Кстати, можно упростить ваш пример. Вместо
Да, знаю...))) Просто привык так писать…
достаточно сделать так
$id = 10;
$item = $modx->getObject('VotesTable', $id);
Можно еще короче....)
$item = $modx->getObject('VotesTable', 10);
Владимир Бабусенко
22 августа 2015, 11:29
0
Спасибо, буду так использовать. На PDO я знал такой вариант записи, думал есть какой то хитрый вариант на xPDO.
Владимир Бабусенко
29 июня 2015, 13:59
0
Спасибо. В принципе когда я создал группу пользователей, то при создании ресурса указав доступ (во вкладке ресурса) только для группы пользователей, создалась группа ресурсов пользователей с ресурсом к которому есть доступ только у группы пользователей. Для админов надо как вы сказали, ручками создать группу ресурсов. Спасибо еще раз за помощь.
Владимир Бабусенко
18 июня 2015, 22:37
0
Спасибо огромное за наводку, изучу, подключу. Пусть будет и сторонний компонент, не принципиально.
Владимир Бабусенко
10 июня 2015, 18:25
0
CMPGenerator или даже UiCMPGenerator
Спасибо…
Владимир Бабусенко
10 июня 2015, 18:13
0
Дописал после $modx->addPackage('myextuser', $modelPath);
$modx->addExtensionPackage, срабатывает при второй сборке пакета. В общем пока так пойдет.

Возник вопрос. Есть какой нибудь инструмент переводящий структуру таблиц на mysql в xml schema xpdo modx.......?
Владимир Бабусенко
09 июня 2015, 23:00
0
Все отлично работает. Связь добавляется.

вопрос еще, скорей всего его уже обсуждали. Глядя на резольвер, на первые две строчки,
$modelPath = $modx->getOption('myextuser_core_path', null, $modx->getOption('core_path') . 'components/myextuser/') . 'model/';
			$modx->addPackage('myextuser', $modelPath);
логичней заменить?
$modx->addPackage
на
$modx->addExtensionPackage
?
Владимир Бабусенко
09 июня 2015, 22:24
0
Алексей, вы правы. Спасибо огромное вам и всем остальным за помощь. Я еще не пробовал ваш первый пост, с резольвером, если что не так будет получатся отпишу…
Владимир Бабусенко
09 июня 2015, 20:40
0
А вот вы, похоже, не совсем понимаете как работают табличные объекты и связи между ними.
Я конечно не гуру modx, но он меня не перестает удивлять.

$User = $modx->getObject('modUser', $modx->user->get('id'));
$Data = $modx->newObject('Userdata');
$Data->set('anyfield','any text'); 
$User->addOne($Data);
$User->save();
Так работает, я честно говоря думал, что объект уже создан… вернее создается экземпляр класса при обращении по алиасу т.е. в этой строке
$profile = $user->getOne('Services');
где то глубоко в недрах modx
Владимир Бабусенко
09 июня 2015, 20:09
0
Алексей, все таки если помочь захотите, то кодо-текст посмотреть надо будет. Он тем более создан самый простой, для проверки работы, смысловой нагрузки никакой не несет. Могу на словах описать что я хотел получить. Я хотел расширить атрибуты юзера, через свою таблицу Userdata. Что бы работа осуществлялась как встроенные объекты user и user_attributes.
Т.е. создать связь user и моя таблица. И записывать туда специфичные данные юзера. Т.е. с профайлом modx работает так (но меня таблица не устраивает):

$user = $modx->getObject('modUser', $modx->user->get('id'));
$profile = $user->getOne('Profile');
$profile->set('fullname', $_POST['fullname']);
$profile->save();
Поэтому я хотел создать свою таблицу, со своими полями и работать так (создать связь с базовым класом)
$user = $modx->getObject('modUser', $modx->user->get('id'));
$profile = $user->getOne('Services'); //алиас связи с моей таблицей
$profile->set('fullname', $_POST['fullname']);
$profile->save();