Выборка статей для юзера
Добрый день. на сайте установлен компонент Login. Настроена авторизация.
Админ создает ресурс Проекты. И в это папке будут создаваться разные страницы.
админ пишет статью и в доп.поле указывет того юзера которому эта страница/статья должно показываеться. Это доп.поле с типом одиночный выбор и выборкой
@SELECT `username` AS `name`,`id` FROM `[[+PREFIX]]users` WHERE `active` = 1
В личном кабинете пользователя есть ссылка на ресурс «Проекты». Сам ресурс содержит код
Как я понимаю нужно фильтровать, но возможно фильтрую не так :) Потомучто не выводится вообще ничего. Подскажите как правильно отфильтровать данное действие
вот лог работы
Админ создает ресурс Проекты. И в это папке будут создаваться разные страницы.
админ пишет статью и в доп.поле указывет того юзера которому эта страница/статья должно показываеться. Это доп.поле с типом одиночный выбор и выборкой
@SELECT `username` AS `name`,`id` FROM `[[+PREFIX]]users` WHERE `active` = 1
В личном кабинете пользователя есть ссылка на ресурс «Проекты». Сам ресурс содержит код
[[pdoResources?
&parents=`[[*id]]`
&depth=`1`
&tpl=`project.tpl`
&includeContent=`1`
&includeTVs=`adres,cost,date-cost,dogovor,kloset,material,remont,square,userz`
&prepareTVs=`userz`
&prepareTVs=`userz`
&tvFilters=`userz==[[!+modx.user.id]]`
]]
Так вот, нужно чтобы пользователю были доступны только те «подресурсы», в которых он указан в тв — userzКак я понимаю нужно фильтровать, но возможно фильтрую не так :) Потомучто не выводится вообще ничего. Подскажите как правильно отфильтровать данное действие
вот лог работы
0.0001509: pdoTools loaded
0.0000391: xPDO query object created
0.0000620: Added TVs filters
0.0006170: Included list of tvs: dogovor, remont, square, kloset, material, adres, cost, date-cost, userz
0.0002282: leftJoined modTemplateVarResource as TVdogovor
0.0001760: leftJoined modTemplateVarResource as TVremont
0.0001719: leftJoined modTemplateVarResource as TVsquare
0.0001671: leftJoined modTemplateVarResource as TVkloset
0.0001709: leftJoined modTemplateVarResource as TVmaterial
0.0001659: leftJoined modTemplateVarResource as TVadres
0.0001681: leftJoined modTemplateVarResource as TVcost
0.0001659: leftJoined modTemplateVarResource as TVdate-cost
0.0001662: leftJoined modTemplateVarResource as TVuserz
0.0008881: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `content`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
0.0000122: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.dogovor`
0.0000081: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.remont`
0.0000069: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.square`
0.0000060: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.kloset`
0.0000060: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.material`
0.0000060: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.adres`
0.0000072: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.cost`
0.0000069: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.date-cost`
0.0000060: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.userz`
0.0000770: Replaced TV conditions
0.0016592: Processed additional conditions
0.0020020: Added where condition: 0=`TVuserz`.`value` LIKE '2', modResource.parent:IN(15,16), modResource.published=1, modResource.deleted=0
0.0000472: Replaced TV conditions
0.0001352: Sorted by modResource.publishedon, DESC
0.0000041: Limited to 10, offset 0
0.0003169: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`content`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties`, IFNULL(`TVdogovor`.`value`, '') AS `tv.dogovor`, IFNULL(`TVremont`.`value`, '') AS `tv.remont`, IFNULL(`TVsquare`.`value`, '') AS `tv.square`, IFNULL(`TVkloset`.`value`, '') AS `tv.kloset`, IFNULL(`TVmaterial`.`value`, '') AS `tv.material`, IFNULL(`TVadres`.`value`, '') AS `tv.adres`, IFNULL(`TVcost`.`value`, '') AS `tv.cost`, IFNULL(`TVdate-cost`.`value`, '') AS `tv.date-cost`, IFNULL(`TVuserz`.`value`, '') AS `tv.userz` FROM `modx2_site_content` AS `modResource` LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVdogovor` ON `TVdogovor`.`contentid` = `modResource`.`id` AND `TVdogovor`.`tmplvarid` = 3 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVremont` ON `TVremont`.`contentid` = `modResource`.`id` AND `TVremont`.`tmplvarid` = 4 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVsquare` ON `TVsquare`.`contentid` = `modResource`.`id` AND `TVsquare`.`tmplvarid` = 5 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVkloset` ON `TVkloset`.`contentid` = `modResource`.`id` AND `TVkloset`.`tmplvarid` = 6 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVmaterial` ON `TVmaterial`.`contentid` = `modResource`.`id` AND `TVmaterial`.`tmplvarid` = 7 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVadres` ON `TVadres`.`contentid` = `modResource`.`id` AND `TVadres`.`tmplvarid` = 8 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVcost` ON `TVcost`.`contentid` = `modResource`.`id` AND `TVcost`.`tmplvarid` = 9 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVdate-cost` ON `TVdate-cost`.`contentid` = `modResource`.`id` AND `TVdate-cost`.`tmplvarid` = 10 LEFT JOIN `modx2_site_tmplvar_contentvalues` `TVuserz` ON `TVuserz`.`contentid` = `modResource`.`id` AND `TVuserz`.`tmplvarid` = 11 WHERE ( `TVuserz`.`value` LIKE '2' AND `modResource`.`parent` IN (15,16) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY modResource.publishedon DESC LIMIT 10 "
0.0033572: SQL executed
0.0000770: Total rows: 0
0.0000091: Rows fetched
0.0000291: Prepared and processed TVs
0.0000050: Returning processed chunks
0.0095630: Total time
5 505 024: Memory usage
Комментарии: 15
В pdoResources 1.4.1 Василий писал, что пока не реализовал tvFilters, для перехода с getResource. Возможно так и не было реализовано, попробуй через
&where=`{"userz:=":"[[!+modx.user.id]]"}`
Приставку TV указывать, вроде, как не надо.
К сожалению так тоже не работает :(
Если тестовый сервер киньте доступы, интересно будет глянуть. Ну или сам уже вечером попробую у себя
&where=`{"userz":"[[!+modx.user.id]]"}`
Нет, к сожалению так тоже не работает. Может ест ькакой-то другой способ решить эту задачку?
проверьте если вместо [[!+modx.user.id]] подставить id конкретного юзера, у которого точно есть материалы.
Можно еще что-то типа такого использовать
Можно еще что-то типа такого использовать
&where=`[" TVuserz = [[+modx.user.id]]"]`
Но тут не помню нужен ли префикс TV
если поставить точно id то данный материал отображается, но его видят все, а не только тот юзер, для которого он как бы должен быть открыт… это нормально? :)
а в [[+modx.user.id]] точно попадает id юзера с материалами?
А как это проверить?
PS: Евгений, может быть я скину доступ, вы гляните профессиональным взглядом? на попытки неуча )))
PS: Евгений, может быть я скину доступ, вы гляните профессиональным взглядом? на попытки неуча )))
ну вы авторизуетесь из другого браузера под нужным юзером и проверяете что выводится на месте [[+modx.user.id]]
Можете скинуть доступы, посмотрю что там у вас не так
Можете скинуть доступы, посмотрю что там у вас не так
Евгений, спасибо за помощь. Все заработало. Все дело в кэше :) Поставил некэшируемый вызов сниппета, и на всякий случай убрал галочку с ресурса про кэш. И все залетало!
Еще раз спасибо!
Еще раз спасибо!
У меня вопрос, а как к следующему выводу в TV списке пользователей добавить первый селект с пустым значением:
Ведь по умолчанию подставляется первый пользователь из списка, а если не нужно к этой странице прикреплять пользователя, то при сохранении в тв попадёт первый выбранный пользователь, а не пустое значение…
доп.поле с типом одиночный выбор и выборкойТакой вариант не срабатывает:
@SELECT `username` AS `name`,`id` FROM `[[+PREFIX]]users` WHERE `active` = 1
Укажите пользователя==||@SELECT `username` AS `name`,`id` FROM `modx_users` WHERE `active` = 1 AND `id` != 1
В таком случае выводит первый пункт «Укажите пользователя», а вторым пунктом выводит голый код @SELECT…Ведь по умолчанию подставляется первый пользователь из списка, а если не нужно к этой странице прикреплять пользователя, то при сохранении в тв попадёт первый выбранный пользователь, а не пустое значение…
Разве что переделать тип ТВ на чекбокс, тогда по умолчанию ничего не будет указано, но если пользователей +100500, то получится неудобоваримая каша…
Нашел в доках ответ на свой вопрос… ))
Вот ответ:
Вот ответ:
@SELECT '- Выберите пользователя -' AS username, 0 AS id UNION ALL
SELECT `username` AS `name`,`id` FROM `modx_users` WHERE `active` = 1
Я ужк точно не помню какие там параметры, но можно использовать что-то типа такого с использованием tpl
Если поставить эти две палки в начале, то получится что первый пункт пустой
||[[+id]]==[[+name]]
Если поставить эти две палки в начале, то получится что первый пункт пустой
@EVAL $modx->runSnippet('pdoUsers', array('active'=>1))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.