Владислав

Владислав

Был в сети 08 февраля 2019, 22:26
Заказы принимаю
Мне кажется твоя проблема решится одним вызовом pdoResources
[[!pdoResources?
                &parents=`14`
                &limit=`0`
                &depth=`0`
                &tpl=`news_tpl_left`
                &includeTVs=`zakr, img_news`
                &sortby=`{
            	    "zakr":"asc",
            		"menuindex":"desc"
            	}`
            ]]
Таким образом в первую очередь сортировка будет сначала по тв полю zakr, получится эффект закрепленного ресурса.
Просто варьируй asc и desc.
Сейчас так и стоит, но я описал выше почему этот вариант не подходит.
Получается вот такой вызов в логе:
WHERE  ( `modUser`.`active` = 1 AND `modUserProfile`.`blocked` = '0' AND `modUserGroupMember`.`user_group` IN ('2') AND `modUserProfile`.`fullname` LIKE '%Рога%' OR `modUserProfile`.`mobilephone` LIKE '%Рога%' )
А нужно:
WHERE  ( `modUser`.`active` = 1 AND `modUserProfile`.`blocked` = '0' AND `modUserGroupMember`.`user_group` IN ('2') AND (`modUserProfile`.`fullname` LIKE '%Рога%' OR `modUserProfile`.`mobilephone` LIKE '%Рога%' ))
То есть скобки добавить.
Да…
[[!pdoPage?
                                    &class=`modUser`
                                    &tpl=`tpl.users.row`
                                    &element=`pdoUsers`
                                    &groups=`client`
                                    &leftJoin=`{
                                		"Operations": {
                                			"class": "PointsOperations",
                                			"on": "modUser.id = Operations.user_id"
                                		},
                                		"Attributes": {
                                			"class": "modUserProfile",
                                			"on": "modUser.id = Attributes.id"
                                		}
                                	}`
                                	&select=`{
                                		"Operations" : "SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) as points_adds, SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_removes,SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) - SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_total",
                                		"Attributes" : "fullname, website"
                                	}`
                                	&groupby=`modUser.id`
                                ]]
Единственное оставил
&leftJoin=`{
                                		"Attributes": {
                                			"class": "modUserProfile",
                                			"on": "modUser.id = Attributes.id"
                                		}
                                	}`
И дальнейший
&select=`{
                                		
                                		"Attributes" : "fullname, website"
                                	}`
Так вероятно будет быстрее работать если выводить только нужные поля, а не все.
Знаю, я бы его и использовал, но у меня есть еще свой класс в котором хранятся операции совершенные пользователем, я убрал его здесь, чтобы не путал никого. Полный вызов у меня выглядит так:
[[!pdoPage?
                                    &class=`modUser`
                                    &tpl=`tpl.users.row`
                                    &element=`pdoFetch`
                                    
                                    &leftJoin=`{
                                		"Operations": {
                                			"class": "PointsOperations",
                                			"on": "modUser.id = Operations.user_id"
                                		},
                                		"Attributes": {
                                			"class": "modUserProfile",
                                			"on": "modUser.id = Attributes.id"
                                		},
                                		"Group": {
                                			"class": "modUserGroupMember",
                                			"on": "modUser.id = Group.member"
                                		}
                                	}`
                                	&select=`{
                                		"modUser" : "*",
                                		"Operations" : "SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) as points_adds, SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_removes,SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) - SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_total",
                                		"Attributes" : "fullname, website"
                                	}`
                                	&groupby=`modUser.id`
                                	&where=`{"Group.user_group": 2}`
                                ]]
[[!pdoPage?
                                        &class=`modUser`
                                        &tpl=` `
                                        &element=`pdoFetch`
                                        &leftJoin=`{
                                            "Attributes": {
                                    			"class": "modUserProfile",
                                    			"on": "modUser.id = Attributes.id"
                                    		},
                                    		"Group": {
                                    			"class": "modUserGroupMember",
                                    			"on": "modUser.id = Group.member"
                                    		}
                                		}`
                                    	&select=`{
                                        	"Attributes": "fullname"
                                    	}`
                                    	&groupby=`modUser.id`
                                    	&where=`{"Group.user_group": 2}`
                                    ]]
Так работает.
Такое впечатление, что пишу сюда вопрос, чтобы сам разобраться и написать сюда ответ)
не меняется потому что в начале того скрипта где это реализуется ошибка вылетает, которую вы выше показали. Если эту ошибку убрать то при изменении опции хотя бы одного товара — цена поменяется у всех и станет одинаковой. Там нужно хорошо перелопатить чтобы заработало как вы хотите.
По крайней мере я не вижу как это сделать проще.