Иван Бондаренко

Иван Бондаренко

С нами с 30 января 2013; Место в рейтинге пользователей: #91
Василий Наумкин
22 мая 2016, 07:53
1
+3
В miniShop2.4-beta2 callbacks являются массивами функций, для работы с которыми предусмотрены специальные методы.

Добавление:
miniShop2.Callbacks.add('Cart.add.before', 'my_callback', function() {
	alert('Отправка отключена!');
	return false;
});

И удаление:
miniShop2.Callbacks.remove('Cart.add.before', 'my_callback');
Павел Гвоздь
17 апреля 2016, 14:55
1
+1
Вот так это делается с tvSuperSelect и Fenom:

<h4>Похожие записи:</h4>
{var $tags = $_modx->runSnippet('tvssTags', [
    'id' => $_modx->resource.id,
    'tv' => '17',
    'tpl' => '@INLINE [[+tag]]',
])}
{$_modx->runSnippet('tvssTickets', [
    'tv' => '17',
    'tags' => $tags,
    'parents' => 0,
    'limit' => 4,
]) ?: 'Похожих ресурсов не найдено'}

А это на нативном синтаксисе MODX Revo:
<h4>Похожие записи:</h4>
[[!tvssTickets?
    &tv=`17`
    &tags=`[[!tvssTags?id=`[[*id]]`&tv=`17`&tpl=`@INLINE [[+tag]]`]]`
    &parents=`0`
    &limit=`4`
]]
Максим Кузнецов
27 февраля 2016, 00:18
2
+2
— Заходите в phpmyadmin.
— Выбираете таблицу modx_site_content
— Переходите в закладку «структура»
— Внизу открывшегося окна нажимаете ОК (Добавить 1 поле в конец таблицы)
Имя: ticket_rating
Тип: int
Длина/значение: 10
По умолчанию: Как определено (0)
Null: галочка
(сохраняем)

Таким способом мы расширили дефолтную таблицу MODX'a со списком ресурсов. Далее:
— Создаем плагин (допустим, customTicketRating) со следующим содержанием:
<?php
    switch ($modx->event->name) {
    	
    	case 'OnMODXInit':
    		$modx->loadClass('modResource');
    		$modx->map['modResource']['fields']['ticket_rating'] = 0;
    		$modx->map['modResource']['fieldMeta']['ticket_rating'] = array(
    			'dbtype' => 'int',
    			'precision' => 10,
    			'attributes' => '',
    			'phptype' => 'int',
    			'null' => true,
    			'default' => 0,
    		);
    		break;
    		
    		case 'OnTicketVote':
    			if ($object->class == 'Ticket') {
    				if ($ticket = $modx->getObject('Ticket', $object->id)) {
    					$properties = $ticket->getProperties('tickets');
    					$rating = !empty($properties['rating'])
    						? $properties['rating']
    						: 0;
    					$ticket->set('ticket_rating', $rating + $object->value);
    					$ticket->save();
    				}
    			}
    			break;
    }
и включаем его на события OnTicketVote и OnMODXInit. Теперь наше новое поле воспринимается модксом и изменяется после каждого голосования за любой ресурс.

Теперь осталось только вызвать сниппет с нужным условием:
[[!pdoPage?
	&element=`getTickets`
	&where=`{"ticket_rating:>": 1}`
]]

Важно: рейтинг начнет вычисляться только с последующих голосований за тикеты.
Василий Наумкин
03 декабря 2015, 20:20
2
0
Ну естественно, это мега-тайна, что все ТВ выбираются с префиксом tv. по умолчанию. В документации прям нет этого параметра. includeTVs, prepareTVs, processTVs и дальше пустота.

Можно и не делать пустой &tvPrefix, но тогда, не поверишь, нужно выводить ТВ вот так:
[[+tv.name]] - MODX
{$_pls['tv.name']} - Fenom
Про вывод через точку я тебе давал ссылку еще 2 часа назад.

А вообще, можно увидеть все плейсхолдеры, если просто не указывать чанк.
Ян Сонов
03 декабря 2015, 20:15
1
0
Это вообще очень смешно, особенно если об этом нигде в документации не указано, что для того чтобы tv нормально можно было по имени вызывать в виде
{$tvName}
надо при вызове сниппета, напр. pdoResource, использовать параметр
&tvPrefix=``
Ну хотя бы сейчас из этого сообщения люди смогут об этом узнать.
Василий Наумкин
28 ноября 2015, 15:33
1
+1
$sql = $modx->prepare('
	SELECT * FROM (
		SELECT * FROM `modx_site_tmplvar_contentvalues` WHERE `tmplvarid` = 11
	) AS `tv_article` 
	LEFT JOIN `modx_shopmodx1c_tmp_categories` AS `main` 
	ON `main`.`parent` = `tv_article`.`value` AND `main`.`processed`=1
');
$sql->execute();
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
	print_r($row);
}
modx.pro/development/325-about-xpdo/
Евгений Webinmd
19 ноября 2015, 12:09
1
+2
&tpl_nN — Имя чанка для каждого N-го ресурса, например, &tpl_n4=`tplEvery4th` будет применено к каждому 4-му ресурсу.

И уже в нужном чанке вызывайте свои баннера.
but1head
30 октября 2015, 19:24
1
0
[[+availability:availability]]
Сниппет availability
<?php

$availability = $input; (ваш плейсхолдер)
$output = '';
switch($availability){
	case 0: $output = 'равен 0'; break;
	case 1: $output = 'равен 1'; break;
	case 'Под заказ': $output = 'только под заказ';
	default: $output = 'ни равен ничему'; break;
}
return $output;
Василий Наумкин
24 августа 2015, 06:12
1
+2
{$_pls} — это плейхолдеры, переданные в чанк. А ты выставляешь и пытаешься получать глобальные плейсхолдеры.

<?php
$pdo = $modx->getService('pdoTools');

return $pdo->getChunk(
    '@INLINE
        <p>{$_pls.tag.sub_tag1} {$_pls.tag.sub_tag2}</p>
        <p>{$_pls["tag.sub_tag1"]} {$_pls["tag.sub_tag2"]}</p>
    ',
    array(
        'tag' => array(
            'sub_tag1' => 'John',
            'sub_tag2' => 'Doe',
        ),
        'tag.sub_tag1' => 'John',
        'tag.sub_tag2' => 'Doe',
    )
);
Воеводский Михаил
20 августа 2015, 16:50
1
0
<?php
switch ($modx->event->name) {
	case 'OnBeforeUserFormSave':
		if ($user->get('username') <> $user->Profile->get('email')) {
			$user->get('username') = $user->Profile->get('email');
		}
		break;
}
Код не проверял, могут быть ошибки.