SEQUEL.ONE

SEQUEL.ONE

С нами с 16 июня 2015; Место в рейтинге пользователей: #85
Владимир
04 сентября 2020, 08:41
1
+1
У вас в коде нет «countButton», вот она и не может его найти. Попробуйте кнопкам прописать класс countButton, а в функции написать: .on('click touchend', '.countButton', function (e) {…
Баха Волков
24 июня 2020, 11:55
1
+1
xtype: 'container',
html: 'тут html'

либо ты можешь расширить Ext.BoxComponent как вариант
Aleksandr Huz
16 июня 2020, 09:21
1
+1
Теперь понятно. Значит нам в массив нужно добавить поле с заголовками товаров.

Примерно, так:
public function prepareRow(xPDOObject $object)
{
        $array = $object->toArray();
        
        $q = $this->modx->newQuery('modResource');
        if(!is_array($array['products'])) {
            $array['products'] = explode(',', $array['products']);
        }
        $q->where(array('id:IN' => $array['products']));
        $q->select(array('pagetitle'));
        if($q->prepare() && $q->stmt->execute()) {
            $resources = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
            $array['productsTitle'] = array_map(function($res){
                return $res['pagetitle'];
            },$resources);
            $array['productsTitle'] = implode(',', $array['productsTitle']);
        }
        

        $array['actions'] = [];

      ....
}
Теперь в место products подставляем productsTitle

Удаляем ненужный код:
функцию — outputArray
и вот эти строчки тоже ни к чему
$item = $this->modx->getObject('modExtraItem', 'modExtraItem.id');
$products = $item->get('products');
vectorserver
14 апреля 2020, 19:23
6
+11
Так проще и быстрее, без обид друг)
Код сниппета ParseInsta:
<?php
//ParseInsta
$cacheKey = "insta_".md5($url);

$returnCache = $modx->cacheManager->get("$cacheKey");

if(!$returnCache){
    $doc = new DOMDocument();
    $doc->loadHTMLFile($url);
    $xpath = new DOMXpath($doc);
    $sharedData = $xpath->query("//html/body/script[1]")->item(0)->textContent;
    $str = $sharedData;
    $modx->cacheManager->set($cacheKey, $str, 7200*60);
    return $str;
}

return $returnCache;
И далее JSON обрабатываем через JS или конвертуть в массив и использовать в чанках
<script>
var instaphotos = [[ParseInsta? $url=`https://www.instagram.com/explore/tags/кофесос`]];
//bla bla bla
</script>
Александр Туниеков
19 марта 2020, 13:52
1
+1
Я тупо в ресолвере через newObject добавляю. Если есть лучше вариант, то будет интересно узнать.
resolve.default_fields.php
/** @var xPDOTransport $transport */
/** @var array $options */
/** @var modX $modx */
if ($transport->xpdo) {
    $modx =& $transport->xpdo;
	/** @var array $options */
	switch ($options[xPDOTransport::PACKAGE_ACTION]) {
		case xPDOTransport::ACTION_INSTALL:
			$fields = [
				[
					'name'=>'res_id',
					'label'=>'Мероприятие',
					'dbtype'=>'int',
					'precision'=>10,
					'phptype'=>'integer',
					'xtype'=>'tevent-univers-combo',
					'sort'=>1,
					'validate'=>'required',
					'select_query'=>
'{
    "parents":"0",
    "template":"1"
}',
					'filter'=>true,
					'active'=>true,
				],
///еще поля
			];
			foreach($fields as $field){
				if(!$in_field = $modx->getObject('tEventField',['name'=>$field['name']])){
					if($in_field = $modx->newObject('tEventField')){
						$in_field->fromArray($field);
						if(!$in_field->save()) $modx->log(xPDO::LOG_LEVEL_ERROR, "[tEvent] field {$field['name']} not add!");
					}
				}
			}
			$modx->log(xPDO::LOG_LEVEL_INFO, '[tEvent] Successfully add Default fields!');
			break;

	}
}
Prihod
29 февраля 2020, 13:01
1
0
Выполни в консоли код
$pkgName = 'msFieldsManager';
$pkgNameLower = mb_strtolower($pkgName);
$modelPath = $modx->getOption("{$pkgNameLower}.core_path", null, $modx->getOption('core_path') ."components/{$pkgNameLower}/") . 'model/';
 $modx->addPackage($pkgNameLower, $modelPath);
  $manager = $modx->getManager();

$manager->addField('MsfmProcessors', 'storage_id', array('before' => 'id'));
 $manager->addField('MsfmFields', 'fieldset_id', array('before' => 'id'));
$manager->addField('MsfmFields', 'dbindex', array('before' => 'dbdefault'));
$manager->addField('MsfmFields', 'default_value', array('before' => 'dbdefault'));
$manager->addField('MsfmFields', 'grid', array('before' => 'required'));
$manager->addField('MsfmFields', 'sortable', array('before' => 'required'));
$manager->addField('MsfmFields', 'unit', array('before' => 'extjs'));
$manager->addIndex('MsfmFields', 'name');
Артем
27 января 2020, 15:15
2
+1
Теоретически можно указать домен в настройке session_cookie_domain, но также изменить session_name чтобы с текущими авторизациями не было конфликтов.
mngatoff
02 декабря 2019, 02:23
6
+7
достаточно триггернуть событие change на input:count, и запрос отправится стандартными средствами минишопа.

я вот так делаю (немного вырвано из контекста, но принцип ясен):
<script>
$(document)
    .on('click touchend', countButton, function (e) { // где countButton - кнопки плюс и минус
        e.preventDefault();
        var $container = $(this).closest('.ms2_form'),
        $count = $container.find('[name="count"]'),
        num = $count.val();
        if (isNaN(num) === false) { // страховочка от, например, пустого поля
            num = parseInt(num, 10);
            switch ($(this).data('ms2-count')) { // соответственно, у кнопок должен быть атрибут data-ms2-count="plus или minus"
                case 'plus':
                    num = num + 1;
                    $count.val(num);
                    break;
                case 'minus':
                    if (num <= 1) return;
                    num = num - 1;
                    $count.val(num);
                    break;
            }
        } else {
            return false;
        }
        $count.trigger('change'); // инициализируем отправку на сервер.
    })
    .on('change keypress keyup', '.ms2_form [name="count"]', function() {
        if ($(this).val().match(/\D/)) {
            this.value = $(this).val().replace(/\D/g,''); // следим на лету, чтобы в поле были только цифры
        }
        if (parseInt($(this).val(), 10) < 1) {
            this.value = 1; // следим на лету, чтобы в поле было не меньше единицы
        }
    });
</script>
SEQUEL.ONE
14 сентября 2019, 20:36
2
0
Сегодня удалось победить отправку почты из формы на reg.ru

Во-первых я настроил smtp сервер от Яндекса по мануалу modhost.pro/help/email
Во-вторых надо было настроить DNS. Тех. поддержка reg.ru в этом помогла:

В SPF-записи отсутствует ip-адрес хостинга:

site.com. 300 IN TXT «v=spf1 redirect=_spf.yandex.net»

Это ошибка связана с политикой DMARC. Вам необходимо добавить ip-адрес сервера хостинга 192.168.255.255 в SPF-запись. Она примет следующий вид:

v=spf1 ip4:192.168.255.255 redirect=_spf.yandex.net
Ну а в третьих проверить параметр emailTo, является ли введённый адрес реальным.
И да, очень помог компонент QuickEmail со сниппетом:

[[!QuickEmail?
    &to=`my-mail@mydomain.ru`
    &debug=`1`
]]
SEQUEL.ONE
20 июля 2019, 20:42
2
0
Не забудьте сделать бекап базы через SSH:

mysqldump -h localhost -P 3306 -umodx_new -p modx_new > dump.sql
Импортировать бекап обратно можно так:

mysql -h localhost -P 3306 -umodx_new -p modx_new < dump.sql