Александр

Александр

С нами с 07 мая 2013; Место в рейтинге пользователей: #313
Александр
12 августа 2016, 19:03
1
+5
Речь идет видимо о уведомления PNotify которые использую в выше обозначенном пакете. Вам необходимо поменять js компонента который работает с jGrowl. Вы не уточнили компонент, который выводит окошки. Если нужно поменять скрипт для всех событий на сайте связанных с отображением окошек оповещений, то для это нужно проделать операцию описанную ниже для всех компонентов. Принцип работ один и тот-же.

На примере компонента miniShop2 скопируйте файл по пути написанному ниже в отдельную папку чтобы не затрагивать исходники минишопа. Пропишите новый путь в системную настройку ms2_frontend_js (данная настройка есть у AjaxForm также и у других стандартных компонентов из modstore)

/assets/components/minishop2/js/web/default.js

Подключите на сайте: PNotify

<script type="text/javascript" src="pnotify.custom.min.js"></script>
<link href="pnotify.custom.min.css" media="all" rel="stylesheet" type="text/css" />

Найдите следующий кусок кода в js файле:

if (typeof($.fn.jGrowl) != 'function') {
                $.getScript(miniShop2Config.jsUrl + 'lib/jquery.jgrowl.min.js', function () {
                    miniShop2.Message.initialize();
                });
            }
            else {
                $.jGrowl.defaults.closerTemplate = '<div>[ ' + miniShop2Config.close_all_message + ' ]</div>';
                miniShop2.Message.close = function () {
                    $.jGrowl('close');
                };
                miniShop2.Message.show = function (message, options) {
                    if (message != '') {
                        $.jGrowl(message, options);
                    }
                }
            }

Удалите следующий код:

if (typeof($.fn.jGrowl) != 'function') {
                $.getScript(miniShop2Config.jsUrl + 'lib/jquery.jgrowl.min.js', function () {
                    miniShop2.Message.initialize();
                });
            }
            else {
...... не удаляемое ....

}

Замените данный код:

$.jGrowl.defaults.closerTemplate = '<div>[ ' + miniShop2Config.close_all_message + ' ]</div>';
                miniShop2.Message.close = function () {
                    $.jGrowl('close');
                };
                miniShop2.Message.show = function (message, options) {
                    if (message != '') {
                        $.jGrowl(message, options);
                    }
                }

на это:

miniShop2.Message.close = function () {
                    PNotify.removeAll()
                };
miniShop2.Message.show = function (message, options) {
                    if (message != '') {
new PNotify({
            title: 'Сообщение',
            text: message
        });
}
                }

Данная инструкция условная, не проверялась.
Володя
05 августа 2016, 22:35
21
+5
можно добавить так
создать плагин на pdoToolsOnFenomInit, в нем добавить модификатор detector
<?php
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
    if (!$fenom = $modx->getOption('fenom', $scriptProperties)) {
        return;
    }
    if (!$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/')) {
	    return;
    }
    
    $key = $MobileDetect->config['force_browser_variable'];
    $device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';
	if (empty($device)) {
	    $device = $MobileDetect->getSettings();
    }
    if (empty($device)) {
        $detector = $MobileDetect->getDetector();
        $device = ($detector->isMobile() ? ($detector->isTablet() ? 'tablet' : 'mobile') : 'standard');
        $MobileDetect->saveSettings($device);
    }

    $fenom->addModifier("detector", function ($value) use ($device) {
        return $value == $device;
    });

    break;
}

и теперь в любом месте можно делать так
{if 'mobile'|detector}
mobile
{/if}

{if 'tablet'|detector}
tablet
{/if}

{if 'standard'|detector}
standard
{/if}
Захарий
27 июля 2016, 11:41
1
+1
ну дак вылетев из-за большого времени. Как я говорил можно через
$modx->getIterator()
. Если через твой вариант
$q = $modx->newQuery('msProduct');
$q->limit('500','0'); //($limit,$offset)
$docs = $modx->getCollection('msProduct',$q);
Играйся с limit & offset. Делай частями
Володя
03 января 2016, 22:23
1
+1
вот так примерно
— выбираем id всех товаров
— потом создаем им опции
— потом добавляем опции цены
<?php
$msop2 = $modx->getService('msop2', 'msop2', $modx->getOption('msop2_core_path', null, $modx->getOption('core_path') . 'components/msop2/') . 'model/msop2/');
if (!($msop2 instanceof msop2)) return '';
/* массив опций продуктов */
$data = array(
    'class_key' => 'msProduct',
    'context_key' => 'web',
    'size' => array(
        '100',
        '200',
        '300',
        '400',
        '500',
        '600',
        '700',
        '800',
        '900',
        '1000'
    )    
);
/* массив опций и цен */
$options = array(
    '100' => 10,
        '200' => 20,
        '300' => 30,
        '400' => 40,
        '500' => 50,
        '600' => 60,
        '700' => 70,
        '800' => 80,
        '900' => 90,
        '1000' => '10'
);
$q = $modx->newQuery('msProduct');
$q->where(array('class_key' => 'msProduct'));
$q->select('id');
if ($q->prepare() && $q->stmt->execute()) {
	$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}
foreach($ids as $id) {
    $data['id'] = $id;
    $modx->error->reset();
    $response = $modx->runProcessor('resource/update', $data);
	if ($response->isError()) {
		print_r($response->getAllErrors());
		continue;
	}
	
	foreach ($options as $value => $price) {
	    $msop = array(
			'product_id' => $id,
			'operation' => 1, // операция
			'option' => 1,    // опция size
			'value' => $value
		);
		
        if (!$msop2Price = $modx->getObject('msop2Price', $msop)) {
		    $msop2Price = $modx->newObject('msop2Price');
		    $msop2Price->fromArray($msop);
		}
	    $msop2Price->set('price', $price);
	    $msop2Price->save();
	}
}
Abu
Abu
15 ноября 2014, 14:06
1
0
755 директории
644 файлы

кусок из скриптов Василия

echo "CHMOD directories...";
find "/var/www/site/site.com" -type d -exec chmod 0755 '{}' \;
echo "CHMOD files...";
find "/var/www/site/site.com" -type f -exec chmod 0644 '{}' \;
Василий Наумкин
27 декабря 2012, 14:55
1
0
Да хоть бы код в тег code оформил, хрен с ним, с «пожалуйста».
Работает без проблем, но только при одном условии — если вызывается не на странице, ТВ которой он должен обновить.
if ($res = $modx->getObject('modResource', 1)) {
	$res->setTVValue(1, 1);
	echo $res->getTVValue(1);

	$res->setTVValue(1, 2);
	echo $res->getTVValue(1);
	die;
// 12
}

А вот так — выдаёт прикольный глюк, очевидно связанный с кэшированием.
if ($res = $modx->getObject('modResource', $modx->resource->id)) {
	$res->setTVValue(1, 1);
	echo $res->getTVValue(1);

	$res->setTVValue(1, 2);
	echo $res->getTVValue(1);
	die;
// 22
}
Поэтому, переходим на обычный xPDO
if ($tv = $modx->getObject('modTemplateVarResource', array('tmplvarid' => 1, 'contentid' => $modx->resource->id))) {
	$tv->set('value', 1);
	echo $tv->get('value');
	//$tv->save(); //по желанию
		
	$tv->set('value', 2);
	echo $tv->get('value');
	die;
// 12
}

Почему выходит такая фигня — мне не ведомо, а копать исходники времени нет.