Сергей

Сергей

С нами с 11 мая 2015; Место в рейтинге пользователей: #354
Василий Наумкин
14 сентября 2015, 08:10
1
0
Нужно написать свой сниппет, который будет совместим с pdoPage и указать его для работы:
[[!pdoPage?
	&element=`твойсниппет`
]]
Принцип работы таких сниппетов вот здесь.
Илья Уткин
21 августа 2015, 10:30
1
+2
$c = $modx->newQuery('Operation');
        $c->where(array(
            'userid' => $userid,
        ));

        // Надо, во-первых, указать, сколько всего в базе строк
        $modx->setPlaceholder($totalVar, $modx->getCount('Operation', $c));

        // А во-вторых, ограничить выборку с помощью переменных, которые передаст нам pdoPage
        $c->limit($limit, $offset);

        $q = $modx->getCollection('Operation',$c); // получаем все денежные пополнения  конкретного юзера в шаблоне  incoming_tpl
        foreach($q as $row){
             $op_array[] = $row->toArray();
               $output .= $modx->getChunk('incoming_tpl', $op_array);
        }
return $output;
Dmitry Rodionov
19 мая 2015, 14:22
2
+2
В итоге для категорий товара я пришел к простому решению, в 2 этапа:
1)сниппет с 1 sql запросом и рекурсивной генерацией меню, для большей быстроты генерации на лету вес можно еще хранить
2)js скрипт который пробегается по дереву и проставляет текущий пункт и родителей

Скорость генерации сократилась с 10s до 1s при первом вызове и потом до 0.05s при кешировании
Василий Наумкин
19 мая 2015, 08:43
2
+1
[[!pdoResources?
	&useFenom=`1`
	&parents=`0`
	&tpl=`@INLINE
	<p>Данные ресурса: {$id} - {$pagetitle}
		{if $parent != 0}
			{set $doc = $pdoTools->getArray('modResource', $parent, ['select' => 'pagetitle,uri'])}
			{if $doc}
				<ul>Данные родителя: {$doc.pagetitle} - {$doc.uri}</ul>
			{/if}
		{/if}
	</p>
	`
]]
Володя
13 апреля 2014, 11:04
4
+1
Приведу небольшой пример на пакете — Office, может кому пригодится…
Допустим хотим ограничить доступ пользователей по email. Пускать только разрешенные email.
1. создаем свое событие для плагина
<?php
$Event = $modx->newObject('modEvent');
$Event->set('name', 'OnOfficeBeforeLogin');
$Event->set('service',1); 
$Event->set('groupname', 'office');
$Event->save();
проверить создалось ли событие можно так
$test = $modx->getObject('modEvent',array('name'=>'OnOfficeBeforeLogin'));
echo $test->get('groupname');
2. добавляем в action.php
$modx->invokeEvent('OnOfficeBeforeLogin', array(
            '_REQUEST' => $_REQUEST
		));
3. пишем плагин на наше событие
<?php
switch ($modx->event->name) {

	case 'OnOfficeBeforeLogin':
	    if ($_REQUEST['action']='auth/sendlink') {
	    
	    $command = $modx->getOption('office_ms2_command', null, "", true);//системная настройка с email участниками
            $instructor = $modx->getOption('office_ms2_instructor', null, "", true);//системная настройка с email тренерами
        
            $emails = array_merge(explode(',', $command ),explode(',', $instructor ));
  
	    if (!in_array($_REQUEST['email'], $emails)) {
	        //меняем почту на неправильную для выдачи ошибки
            $_REQUEST['email'] = "неправильная";
   
	    }
	    else {
           //если есть доступ то ничего не делаем
           //или делаем чтото еще)))
	    }

	    }
	    break;
}