Владимир

Владимир

С нами с 28 декабря 2012; Место в рейтинге пользователей: #53
Andrei D.
17 апреля 2014, 02:43
1
0
Блин… в третий раз, но уже без ошибок)) Правильная версия:

Предстоящие:
[[!pdoPage?
&element=`getTickets`
&parents=`38`
&includeTVs=`program-start`
&tpl=`program-list-ru`
&where=`["program-start > \"[[!today]]\""]`
&sortby=`program-start` &sortdir=`ASC`
]]
Прошедшие:
[[!pdoPage?
&element=`getTickets`
&parents=`38`
&includeTVs=`program-start`
&tpl=`program-list-ru`
&where=`["program-start < \"[[!today]]\""]`
&sortby=`program-start` &sortdir=`DESC`
]]
Володя
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;
}
Aртур Чикин
23 марта 2014, 18:59
1
0
Тогда pdoResources полностью оправдает твои ожидания.

Для глав создай шаблон к примеру у него id 10 а для разделов создай шаблон с id 11
Тогда при вызове можно сделать так:
[[!pdoResources?
  &parents=`0`
  &depth=`0`
  &limit=`0`
  &hideContainers=`1`
  &hideUnsearchable=`1`
  &tplCondition=`template`
  &tplOperator=`==`
  &conditionalTpls=`{"10":"Здесь имя чанка для ГЛАВ", "11":"Здесь имя чанка для разделов"}`
]]
Виталий Валерьевич
10 февраля 2014, 14:49
4
0
Делается очень просто, опишу алгоритм и набросаю от руки, поднимать наработки долго.

Алгоритм:

  1. Получить реферара
  2. Определить поисковую систему
  3. Получить поисковый запрос или ссылку переход с которой был осуществлен
  4. Записать в cookie или в сессию результат
  5. В нужном месте собрать

Пишем сниппет:

$referer = $_SERVER['HTTP_REFERER'];
setcookie('referer', $referer, mktime(0, 0, 0, 1, 1, 2015));
	
if (stristr($referer, 'yandex.ru')) { 
	$search = 'text='; $crawler = 'Yandex'; 
}
else if (stristr($referer, 'rambler.ru')) { 
	$search = 'words='; $crawler = 'Rambler'; 
}
else if (stristr($referer, 'google.ru')) { 
	$search = 'q='; $crawler = 'Google'; 
}
else if (stristr($referer, 'google.com')) { 
	$search = 'q='; $crawler = 'Google'; 
}
else if (stristr($referer, 'mail.ru')) { 
	$search = 'q='; $crawler = 'Mail.Ru'; 
}
else if (stristr($referer, 'bing.com')) { 
	$search = 'q='; $crawler = 'Bing'; 
}
else if (stristr($referer, 'qip.ru')) { 
	$search = 'query='; $crawler = 'QIP'; 
}
	
if (isset($crawler)) {
	$phrase = urldecode($referer);
	preg_match('/'.$search.'([^&]*)/', $phrase.'&', $phrase2);
	$phrase = $phrase2[1];
}

setcookie('phrase', $phrase, mktime(0, 0, 0, 1, 1, 2015));

Запускаем в шаблоне, перед <!DOCTYPE>, далее если используется Formit, создаем сниппет-hook и записываем в него следующую конструкцию (как пример):

$output = '';

foreach ($_COOKIE as $k => $v) {
	if (0 === strpos($k, 'utm')) $output .=  "$k: $v \n";
}

$hook->setValue('referer', $output);
return true;

Итог: получаем плейсхолдер [[+referer]], который содержит всю необходимую информацию по рефереру. Код от руки, естественно требует доработок, но вроде нигде не ошибся.
Василий Наумкин
19 декабря 2013, 11:30
1
0
I think, you have an error in $searchFilter or $tvFilter.

Try to debug you call using &showLog=`1`. For example:
[[!pdoResources?
	&parents=`0`
	&where=`{"pagetitle:LIKE":"%", "OR:description:LIKE":"%", "OR:longtitle:LIKE":"%"}`
	&showLog=`1`
]]

Will output:
0.0000741: pdoTools loaded
0.0000288: xPDO query object created
0.0029569: 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`, `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.0000529: Processed additional conditions
0.0005138: Added where condition: pagetitle:LIKE=%, OR:description:LIKE=%, OR:longtitle:LIKE=%, modResource.published=1, modResource.deleted=0
0.0000181: Sorted by publishedon, DESC
0.0000050: Limited to 10, offset 0
0.0005889: 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`.`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` FROM `modx_site_content` AS `modResource` WHERE  ( `modResource`.`pagetitle` LIKE '%' OR `modResource`.`description` LIKE '%' OR `modResource`.`longtitle` LIKE '%' AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY publishedon DESC LIMIT 10 "
0.0001440: SQL executed
0.0001042: Total rows: 45
0.0001040: Rows fetched
0.0005629: Returning processed chunks
0.0054829: Total time
3 407 872: Memory usage

As you see — there is exists published and deleted conditions by default.
Added where condition: pagetitle:LIKE=%, OR:description:LIKE=%, OR:longtitle:LIKE=%, modResource.published=1, modResource.deleted=0
Василий Наумкин
18 сентября 2013, 17:23
9
0
<?php
$tvid = 1; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$res[$row['contentid']] = $row['value'];
	}
}
print_r($res);

Получишь массив с id ресурсов и значенями ТВ c id = 1.
Василий Наумкин
24 августа 2013, 17:47
1
0
Ну ты чего, не уложняй.

Если писать как я показываю — это чистое SQL условие. Добавляй там скобочки, никаких массивов не нужно.
Поэтому имена ТВ и не заменяются — ибо обработки нет никакой.

То есть, это строка в JSON:
&where=`["
	Здесь чистое SQL условие, как оно будет при вызове сниппета, со скобочками и прочим.
"]`
Василий Наумкин
24 августа 2013, 17:25
1
0
Попробуй так:
&where=`["
	show_in_main != 1 OR show_in_main IS NULL
"]`

Ну и еще вот тут много информации.
Василий Наумкин
13 июля 2013, 18:02
2
0
if (empty($parent)) {$parent = $modx->resource->id;}

$pids = array_merge(array($parent), $modx->getChildIds($parent));
$ids = array();

$q = $modx->newQuery('msProduct');
$q->where(array('class_key' => 'msProduct','parent:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
if ($q->prepare() && $q->stmt->execute()) {
	$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}

$q = $modx->newQuery('msProduct');
$q->leftJoin('msCategoryMember', 'msCategoryMember', '`msCategoryMember`.`product_id` = `msProduct`.`id`');
$q->where(array('class_key' => 'msProduct','msCategoryMember.category_id:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
if ($q->prepare() && $q->stmt->execute()) {
	$ids2 = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
	if (!empty($ids2)) {
		$ids = array_unique(array_merge($ids, $ids2));
	}
}

return count($ids);
Василий Наумкин
06 мая 2013, 15:24
1
0
В настройках источника файлов указывается массив параметров для PhpThumb.

Так что да, есть.