Александр

Александр

С нами с 07 мая 2013; Место в рейтинге пользователей: #361
Александр
31 мая 2018, 21:55
0
Интересно получается: modx.pro сам подсказывает :)
Александр
31 мая 2018, 21:50
0
Действительно. Спасибо за компонент, очень интересная штука
Александр
31 мая 2018, 21:00
0
(612b5939e15efa0912d6dc9ca44b182f или вот такое если аноним)
О_о
А почему не 0 или -1, а такой диковинно гигантский набор символов?
Александр
31 мая 2018, 20:57
1
+1
Спасибо, хорошее решение! Только таким способом вы отрезаете 2 события: msOnBeforeValidateOrderValue и msOnValidateOrderValue, и вызываться, насколько я понимаю, будут эти события у родителя, то есть валидация будет происходить по стандарту в miniShop2. Конечно, это только если использовать это в плагинах, но тем не менее, почему не сделать так?
public function validate($key, $value)
    {
        if ($key != 'comment') {
            $value = preg_replace('/\s+/', ' ', trim($value));
        }

        $response = $this->ms2->invokeEvent('msOnBeforeValidateOrderValue', array(
            'key' => $key,
            'value' => $value,
        ));
        $value = $response['data']['value'];

        switch ($key) {
            case 'receiver':
                // Transforms string from "nikolaj -  coster--Waldau jr." to "Nikolaj Coster-Waldau Jr."
                $tmp = preg_replace(
                    array('/[^-a-zа-яёЁіїєґў’ʼ`\s\.\']/iu', '/\s+/', '/\-+/', '/\.+/', '/(\'|’|ʼ|`)+/'),
                    array('', ' ', '-', '.', "'"),
                    $value
                );
                $tmp = preg_split('/\s/', $tmp, -1, PREG_SPLIT_NO_EMPTY);
                $tmp = array_map(array($this, 'ucfirst'), $tmp);
                $value = preg_replace('/\s+/', ' ', implode(' ', $tmp));
                if (empty($value)) {
                    $value = false;
                }
                break;
            default:
                return parent::validate($key, $value);
        }

        $response = $this->ms2->invokeEvent('msOnValidateOrderValue', array(
            'key' => $key,
            'value' => $value,
        ));
        $value = $response['data']['value'];

        return $value;
    }
Александр
28 мая 2018, 14:27
0
Василий, похоже я неправильно выразился и суть моего сообщения была неверно понята.

Речь как раз о том случае, когда автор согласился с тем, что баг есть, утвердительно написал, что решит в ближайшее время, но это время всё никак не наступает.

Или когда разработчик не отвечает совсем в течение определенного времени, причём сроки никакие я не выдумывал, это должно составляться на основе статистики о среднем времени ответа на сообщения, по моему мнению.

А про прихоти и собак речи и не было, не знаю, зачем Вы это добавили.
Я может что-то не понимаю, но по-моему в этой ситуации выигрывают оба. Автор получает обратную связь, баг-репорт, практически, о работе своего расширения, что позволяет ему улучшить своё расширение, получить отзывы от реальных проектов, как кто использует его продукт, узнать какие функции интересны людям, чтобы сделать и продукт более функциональным, и привлечь большую аудиторию. А мотивирует его то, что отвечать за свои слова надо вовремя всего лишь статистикой: «Неотвеченные тикеты: 2/150».
И от этого в выигрыше все: довольные покупатели, которые получили корректно работающее то, что хотели, и автор расширения, возможно получив новый опыт, улучшив, исправив свой продукт, сообщество MODX в целом от новой возможности, которую можно внедрить на свой сайт.
Александр
28 мая 2018, 14:04
0
Судя по тексту ошибки, скрипт не может переименовать изображение: не нравится ему слеш / в названии, он его экранирует и файл далее не видит из-за этого.
Александр
27 мая 2018, 15:45
0
Так то оно так, только некоторые расширения продолжают существовать в магазине с неисправленными багами, на которые не было дано ответа. Выходят обновления, новые фичи, а старые баги кочуют из версии к версии, из-за нерешенных тикетов в том числе.

Есть смысл сделать возможность установки тикету статус «решенный» при каждом комментировании, после которого тикет стане только для чтения. И автоматически проставлять этот статус через N-ное количество времени у тикетов, на которые автор дополнения дал ответ, а клиент статус не поставил.
Александр
27 мая 2018, 15:37
0
Отвеченный тикет != решенный тикет.
Пример.
— Нашёл баг, не работает….
— Да, есть баг, исправлю.
Проходит 3 месяца… тишина.
Александр
23 мая 2018, 14:26
+2
Здравствуйте. Не проверял, но нужно дополнительно присоединить таблицу с TV для родителя. Что-то такое:
{'msProducts' | snippet : [
	'templates' => 3,
	'limit' => 0,
	'parents' => 0,
	'tpl' => 'yandexProductsAndPricesOffer',
	'leftJoin' => [
		'parentCategory' => [
			'class' => 'msCategory',
			'on' => 'msProduct.parent = parentCategory.id'
		],
		'parentCategoryTV' => [
			'class' => 'modTemplateVar',
			'on' => 'parentCategoryTV.id=parentCategoryTVvalue.tmplvarid'
		],
		'parentCategoryTVvalue' => [
			'class' => 'modTemplateVarResource',
			'on' => 'parentCategoryTV.contentid=parentCategory.id'
		]
	],
	'select' => [
		'msProduct' => '*',
		'parentCategory' => '*',
		'parentCategoryTVvalue' => '*'
	],
	'where' => [
		'parentCategoryTVvalue.categoryYandexProductsAndPricesEnabled:=' => 1
	],
	'showLog' => 1
]}
Александр
21 мая 2018, 23:25
+1
1) Создать класс в core/components/minishop2/custom/delivery (инструкция)
2) Зарегистрировать созданный класс (инструкция)
3) Указать в нужных методах доставки созданный класс
Александр
29 апреля 2018, 15:40
0
1) Не работает с последним msOptionsPrice2. Думаю это как-то связано с:
2.5.2 beta (24.04.2018)
Change «saveProductModification» [msopModification]
Change «isWorkingClassKey, isWorkingTemplates, loadControllerJsCss» [msoptionsprice]
2.5.1 beta (23.04.2018)
Change «msOptionsPriceMsOnGetProductPrice,msOptionsPriceMsOnGetProductWeight,msOptionsPriceMsOnBeforeAddToCart» [msOptionsPricePlugin]
Add «msoptionsprice_mid» [js]
2) При установке даже на чистый MODX на демо modhost.pro не загружаются лексиконы. В меню вместо «cityFields» написано «cityfields_action». Также вместо ошибок выводятся названия лексиконов.

3) Можно ли как-то интегрировать это решение с msOptionsPrice2? Т.е. города и информацию для городов добавлять через cityFields, а цены регулировать msOptionsPrice2?
Например, если товар «iPhone 5» в двух цветах: красный и белый. 2 региона: Москва и Санкт-Петербург. В таком виде, как это сделано сейчас, можно лишь изменить отдельно цену для региона и отдельно цену для цвета, а если добавить как модификатор, то можно будет и для разных регионов и разных опций выставлять цену. К тому же, можно будет выставлять старую цену отдельно для каждой модификации.
Александр
11 апреля 2018, 16:33
0
PHP 7.2
MODX 2.6.2
Хостинг modhost
(ERROR @ /home/***/www/core/components/mschart/model/mschart/mschart.class.php: 120) PHP warning: count(): Parameter must be an array or an object that implements Countable
Александр
01 февраля 2018, 12:17
0
Протестировать расширения (в том числе и платные) вы всегда можете на фирменном хостинге modhost.pro от создателя сего ресурса.
Александр
01 февраля 2018, 11:26
0
Версия pdoTools выше 1.9.4?
Пробовали вызвать некешированную версию сниппета?
Александр
01 февраля 2018, 11:06
0
Покажите, как вы это сделали.
Александр
31 января 2018, 21:29
+1
А какой должно выводить элемент для крайнего, если он крайний (соседа слева/справа у него нет)?
Александр
22 декабря 2017, 23:41
0
Здравствуйте, Володя. Скажите, как можно объединить 2 ваших дополнения: GeoLocation (для создания разных регионов и указания им разных данных, напр., контактных) и msOptionsPrice2 (для создания разных опций товаров и указания им соответственно разных цен). Идея такая: чтобы в msOptionsPrice2 появился новый «модификатор» Город/Регион, наравне с color, size и др. Отличие лишь в том, что этот параметр нельзя изменить в карточке товара, а он устанавливается в 1 месте на весь сайт.
Если у товара в модификациях только 1 регион, то этот товар отображать только в этом регионе.
Если у товара несколько регионов, то отображать в этих регионах, а в других скрывать.
Если у товара не указан регион, то отображать во всех.
Александр
17 ноября 2017, 18:44
0
html, body {
    -webkit-overflow-scrolling : touch !important;
}
Александр
16 ноября 2017, 01:12
0
Ещё такая конструкция в шаблоне помогает
{$_modx->lexicon->load($_modx->config['cultureKey'] ~ ':minishop2:default')}
но это не похоже на изящное решение.

P.S. В шаблоне только
[[!msProducts]]