Степан Прищепенко

Степан Прищепенко

С нами с 09 апреля 2013; Место в рейтинге пользователей: #66
Степан Прищепенко
22 мая 2019, 12:03
2
+1
Доброго, делаю через gulp, есть определенная структура и от местоположения файликов, скрипт сам решает что куда распихивать, просто напишу частично что используется:
  • gulp-iconfont и gulp-iconfont-css
  • gulp-rev
  • gulp-uglify
  • gulp-clean-css
  • gulp.spritesmith и gulp-imagemin
  • gulp-svgmin, gulp-svg-sprite, gulp-cheerio
Степан Прищепенко
22 мая 2019, 11:50
0
На вкус и цвет конечно, мне больше нравиться вендоры отдельно компоновать (они достаточно редко обновляются, за исключением если это делается автоматом конечно со всякими тестами), а динамичные куски js держать в html. В итоге получаем 1-н css 1-н js 1-н спрайт, шрифты и отдельные файлы подгружаемых картинок контента.
Степан Прищепенко
22 мая 2019, 09:49
0
Можно еще в один файлик все компоновать быстрее будет.
Степан Прищепенко
06 мая 2019, 11:15
1
+3
Добавлю свои 5 копеек:
1. Gitify — делает полный дамп БД и все на этом, по крайней мере то что касается БД, с файлами работает по другому. Это я сужу из исходников, самого не использовал.
2. Я не вчитывался и поэтому не совсем понял, для чего тебе тут все про компонент говорят, когда речь идет о сайте вцелом, предпологаю, modExtra позволяет хранить все в файликах (не пользовался) — тогда действительно имеет смысл его использовать как писали выше с контролем версий, но часть данных из БД все равно не проконтролируешь (процентов 90 так, но оно все и не нужно обычно).
3. Винда — ЗЛО для разработки! если это не C# или еще что-нить от мелкомягкого. Когда один программист будет отправлять данные в гит (не гитхаб — это разные вещи) из винды, а другой из линукса, то практически на втором пуше получите сообщение о различном CRLF и этот гемморой надо будет лечить на всех файликах. Идеально когда все сидят в одной платформе.
4. В команде где я работаю, мы используем феном и храним все в файликах, для контроля БД была написана эта штука, попробуй может пригодится.
Степан Прищепенко
16 апреля 2019, 22:00
0
Пожалуйста, пробуйте, внес правки, теперь все безопасно даже при вводе не верных путей.
Степан Прищепенко
02 апреля 2019, 22:45
0
в функции msMCDMiniCart.animationCart ошибка, тормозящая работу скрипта, нужно добавить проверку на существование картинки в форме:
if (!img.length) return;
img.clone()
Степан Прищепенко
27 марта 2019, 13:04
0
P.s.: в файле msmcdminicart.js
меняем
this.productId = 'input[name=msmcd_id]';
на
this.productId = 'input[name=id]';
Степан Прищепенко
27 марта 2019, 00:20
0
Приветствую, хороший компонент, но хотел отметить несколько вещей:
1. в папке модели должен быть metadata.mysql.php, хотя бы
с таким содержимым:
$xpdo_meta_map = array();
Иначе ловим ошибку.

2. В основном классе, метод инициализации есть, но не вызывается,
и там же pdo подключается, но не получает конфиг, следует
параметры в него не передашь, можно исправить вот так:

if ($this->pdoTools = $this->modx->getService('pdoTools')){
	  $this->pdoTools->setConfig($this->config, false);
	}
3. Ключ (хеш) конфигурации корзины, при ajax запросе передается,
но нинциализация не происходит, это значит как минимум pdo не получит конфиг из пункта 2.
Для этого инициализация может быть такой:

protected $initialized = false;
	public function initialize($config = array())
    {
        if ($this->initialized) return true;

        $this->config = array_merge($this->config, $config);

        if ($this->miniShop2 = $this->modx->getService('miniShop2')) {
            $this->miniShop2->initialize($this->ctx);
        }
        if ($this->pdoTools = $this->modx->getService('pdoTools')){
            $this->pdoTools->setConfig($this->config, false);
        }

        $this->initialized = true;
    }
А в handleRequest:

$tmp = $this->getSessionData();
    $tmp = is_array($tmp) ? $tmp : array();
    $this->initialize($tmp);
Ну и в сниппеты и плагины после успешной подгрузки класса:
$msMCD->initialize();
4. Чанк элемента в корзине содержит:
<input type="hidden" name="msmcd_id" value="{$item.id}">
Ошибкой было называть имя msmcd_id вместо id, так как это может сломать
работу других компонентов
, висящих на событиях изменения
товаров в корзине. Да и префикс msmcd_ не используется ни где.

5. При удалении товара вместо Cart.remove.response.success
нужно использовать:
miniShop2.Callbacks.add('Cart.remove.ajax.always', 'msmcd_remove', function(response) {
            var cur_responce = response.responseJSON || {}
            // console.log ("done args",cur_responce);
            // debugger;
            if (cur_responce && cur_responce.success){
                if ($('.ms2_product .msmcd-count').length) {
                    $(msMCDMiniCart.formId + k + ' ' + msMCDCount.msmcdCount).val(0);
                    $(msMCDMiniCart.formId + k + ' ' + msMCDCount.msmcdAction).val('cart/add');
                }

                var sendData = {
                    action: 'msmcd/chunk',
                    ctx: msMCDMiniCart.ctx
                };
                msMCDMiniCart.send(sendData);
            }
        });
Тогда будет правильно удалять товары.

Вроде после такого напильника, стало работать как нужно. Желаю творческих успехов!
Степан Прищепенко
25 февраля 2019, 00:23
0
Мой вариант getLanguages на основе текущего:
<?php

$log = $output = '';
$default_host = $modx->getOption('http_host', []);

$pdoFetch = $modx->getService('pdoTools');
$pdoFetch->setConfig($scriptProperties, false);
$pdoFetch->addTime('pdoTools loaded');

preg_match('/([^.]+){1}\.([^.]+)$/i', $_SERVER['HTTP_HOST'], $matches);

$languages = $modx->getIterator('localizatorLanguage', [
	'http_host:LIKE' => "%{$matches[0]}",
	'active'         => 1
]);
$placeholders = [];
$result = false;
foreach($languages as $language) {
	// print_r($language->toArray());

	// if (!$result && $language->http_host == $matches[0]){
	if ($language->key == $modx->localizator_key){
		$result = true;
	}

	if ($default_host == $matches[0]){
		$default_key = $language->key;
	}
	$placeholders[$language->key] = [
		'id'         => $language->id,
		'name'       => $language->name,
		'cultureKey' => $language->key,
		'current'    => ($language->key == $modx->localizator_key),
		'active'     => ($language->key == $modx->localizator_key),
		'url'        => $_SERVER['REQUEST_SCHEME'] . '://' . $language->http_host,
	];
}


// сортировка результата
uasort($placeholders, function ($a, $b){
	return ($a['id'] <=> $b['id']);
});


if (!$result && $default_key && $placeholders[$default_key]){
	$placeholders[$default_key]['active'] = true;
}

$output = !empty($tpl) ? $pdoFetch->getChunk($tpl, ['langs' => $placeholders]) : print_r($placeholders, 1);

// print_r($placeholders);
// die();

if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) {
	$log .= '<pre class="pdoResourcesLog">' . print_r($pdoFetch->getTime(), 1) . '</pre>';
}


if ($scriptProperties['return'] == 'data') {
	return ['data' => $output, 'log' => $log];
}

if (!empty($toPlaceholder)) {
	$modx->setPlaceholder($toPlaceholder, $output);
}

return $output;
пример использования:
{if !$localizator = $_modx->cacheManager->get('localizator_'~$.server.HTTP_HOST)}
  {set $localizator = '!getLanguages' | snippet : [
		'showLog'         => '1',
		'tpl'             => '@FILE:others/chunks/languages__items.tpl',
  ]}
  {set $null = $_modx->cacheManager->set('localizator_'~$.server.HTTP_HOST, $localizator, 1)} {* кэш на 30 минут *}
{/if}

<span class="lang-selector dropdown-el">
	{$localizator}
</span>
Степан Прищепенко
13 февраля 2019, 09:07
0
Как вариант конечно, но товарищ имеет ввиду скорее всего родной импорт от modx, никогда им не пользовался.
Степан Прищепенко
18 января 2019, 11:34
0
Создай вручную таблицу, длина поля name максимум 64 в этом случае

CREATE TABLE `modx_tickets_threads` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `resource` INT(10) unsigned NOT NULL DEFAULT '0', `name` VARCHAR(64) NOT NULL DEFAULT '', `subscribers` TEXT NOT NULL, `createdon` DATETIME NULL, `createdby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `closed` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deleted` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deletedon` DATETIME NULL, `deletedby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `comment_last` INT(10) unsigned NOT NULL DEFAULT '0', `comment_time` DATETIME NULL, `comments` INT(10) unsigned NULL DEFAULT '0', `properties` TEXT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), INDEX `resource` (`resource`), INDEX `comment_last` (`comment_last`), INDEX `comments` (`comments`), INDEX `closed` (`closed`)) ENGINE=InnoDB
Степан Прищепенко
11 января 2019, 08:53
0
Мой вариант msextrafields только нужно шарить чтобы правильно настроить
Степан Прищепенко
31 декабря 2018, 17:35
+2
Уффф я честно не предаствляю как можно с «полпинка» связать дерево процессы компоненты да и вообще оживить все менюшки, короче я что-то даже не понял что получилось в итоге, можно ли видос или объяснение, а что собственно это дало кроме использования vue в качестве админки в которой ничего нет, прошу не закидывать камнями, я просто не в теме vue еще. Да и конечно же с наступающем, всем чистого кода в новом году! )
Степан Прищепенко
27 декабря 2018, 16:47
0
В догонку: не считается кол-во товара в счете, т.к.:
в методе run класса mspReceiptAccountItemHandler идет вызов
$data = $this->beforeData($data);
ПОСЛЕ того как заполнен массив
$data
. Далее если это исправить, все равно не заработает, т.к. в классе ReceiptAccountSH (мы же печатаем счет), в методе beforeData есть такая замечательная строчка
$data['cart'] = implode('', $carts);
по мне так лучше заменить это на
$data['cart'] = $carts;
, и дополнить вывод $data в методе run()
...'cart' => $this->out['cart'],...
Таким образом мы избавимся от лишнего шаблона заполнения строк в товаре и от лишнего метода.
Степан Прищепенко
26 декабря 2018, 11:11
0
Привет, смотрел компонент на тестовом хостинге, что обнаружил:
1. в сниппете mspreceiptaccount есть вызов метода
if ($Item = $mspReceiptAccount->getItem()) {
что приводит… ни к чему т.к. getItem требует ввода первого параметра, если передать туда например:
getItem('ReceiptAccountSH')
то строится форма, уже хорошо.
2. В форме тычем на печать счета и видим, что значение переменной class не передается в action результат 'Could not load class'

Возможно старая версия, т.к. подозреваю что чего-то не хватает, написал на всякий.
Степан Прищепенко
26 ноября 2018, 09:07
0
По картинкам понравилось, если добавить древовидную стрктуру, то будет todolist
Степан Прищепенко
21 ноября 2018, 11:24
0
Думаю дело в твшках, выруби их, и потести, если нормально подключай через join ну и если на страницах чанка используется fast field это теги с решеткой, выруби их или сделаю некешируемыми. Также можешь для эксперимента вызвать несущствующий tpl чтобы он не обрабатывал его, кто знает что там еще вызывается и как у тебя внутри это чанка. Ну а вобще showLog правильно Алексей написал.
Степан Прищепенко
15 ноября 2018, 09:29
0
Я не в теме про что тут выше речь и идет, да и не важно, Сергей отличная штука получилась! СПАСИБО! теперь я знаю чем буду пользоваться вместо Николаевской консоли )
Степан Прищепенко
02 октября 2018, 22:24
0
а есть еще culture_key… это тот параметр который воообще ни как не проверяется, но редко кем используется.