Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
08 июня 2023, 15:05
0
Я сказал часть функционала не работает и не будет работать. Например попробуйте через новый migx создать пакет и таблицу в базе данных. Когда я тестировал не работало.
А в pdoTools код типа
{'!pdoResource' | snippet : [
   'loadModels'=>'modextra',
   'class'=>'modextraItem',
]}
Работать наверно не будет. У меня сейчас modx3 не установлен и точно сказать не могу работает или нет. Но скорей всего в modx 3.3 такой код не будет работать.
Александр Туниеков
08 июня 2023, 14:15
0
Скорей всего migxdb, pdotools и getTables никогда не смогут нормально работать в MODX3. В MODX3 внесли изменение Перед тем как работать с объектами их необходимо подключить в скрипте через use. Например
use MODX\Revolution\modResource;
Но в MODX REVO можно использовать конструкцию вида
{'!pdoResource' | snippet : [
   'loadModels'=>'modextra',
   'class'=>'modextraItem',
]}
И работать с любой таблицей базы данных. Просто указываешь класс таблицы в настройках сниппета.
Так вот, по идее, чтоб работать с какой-то таблицей в модекс 3 надо прописать вызов ее класса use в начале сниппета. Но это не возможно. Сниппеты и код pdoTools, migx и getTables при запуске кода не знают какой класс им надо подключать. Класс прописан в настройках в виде текста. А в php запустить use какая-то переменная нельзя. Сейсас в MODX 3.0.3 это еще работает, но в MODX 3.3 обещают отключить метод modx->loadClass через который сейчас вызов произвольного класса через текстовую переменную его названия еще работает.

Вообщем существенная для меня часть возможностей migx и pdoTools в MODX3 накроется. Я разбирался в этой теме полгода назад когда хотел перевести getTables на MODX3 и возможно еще что-то не понял. Не судите строго если ошибся. Но по моему для меня переход на MODX3 не имеет смысла. Вроде как часть нужного фуункционала в будущем просто не будет работать.
Александр Туниеков
08 июня 2023, 13:41
0
Есть те, кто делают сайты, а есть те, кто развивает бэк, и их осталось единицы…
Бек или админку? Было бы что в админке развивать… Ресурс, чанк, сниппет, пользователя и т.д. можно создать и отредактировать и что еще надо то?
Александр Туниеков
08 июня 2023, 12:32
0
MODX для тех, кто творит, WP для тех, кто просто делает, это отличие многого стоит
Модекс крут :-). Я только на модекс и работаю. Ни ларавел ничто другое мне ни зашло. Просто потому что от старта начала программирования до рабочего сайта в модекс минимум телодвижений. А на ларавел (Я могу ошибаться) на старте нет админки и пользователей.Смысл самому каждый раз писать админку и процедуры аутентификации??? Модекс крут потому что многое стандартно используемое уже есть и можешь сосредоточиться на конкретно логике своего приложения. В том числе круто что модекс почти не ограничевает в том какое приложение ты хочешь написать. Мы например пишем управление производством.
Аналогов по соотношению гибкость-скорость разработки я не знаю.
Александр Туниеков
11 мая 2023, 18:02
0
Можно getTables использовать. https://modstore.pro/packages/utilities/gettables
Сколько использовал тупняков при виборке из базы не замечал. В пределах секунды грузиться.
Если устроит, то напишу как использовать.
Александр Туниеков
05 мая 2023, 12:19
0
Странно. Вроде обновления в модсторе бесплатные. Было бы хорошо если была бы какая-то процедура разрешения конфликтов. Например написать тему с отзывом об авторе компонента. Только конечно пока заморачиваться никто не хочет.
Александр Туниеков
04 мая 2023, 20:36
0
офтоп. а за что от дмитрия минусы? мешают ориентироваться.

ИИ круто и в будущем поможет снять часть рутины, но уметь правильно ему вопросы задавать мешает. Вообще хотелось бы чтоб был в контексте твоих задач и понимал с полуслова :-)
Александр Туниеков
21 апреля 2023, 12:51
0
Поиск делает OpenSearch в своем индексе(базе) и соответственно сайт должен загрузить на него данные по которым поиск идет. На 40т товаров данные грузятся 5 минут. Если поменять хостинг, то соответственно минут 5-6 и не будет работать фильтр. Надо буде перезапусть создание индекса вручную
Александр Туниеков
21 апреля 2023, 12:39
0
нужно ли в будущем обновления
Ну думаю можно обновлять OpenSearch. Пока совместимость не сломают. Хотя врядли в ближайшем будущем сломают. Я не обновляю пока. Еще даже не разбирался как обновлять.
Александр Туниеков
21 апреля 2023, 12:32
0
OpenSearch бесплатный opensource.
Кроме единоразовой оплаты за модуль, еще будут оплаты?
Нет.
Хотелось бы еще увидеть интеграцию с SeoFilter.
Пока в планах. Но насколько я смотрел там ничего сложного нет. Просто немного переписать js SeoFillter.

Хотя есть одна мысль которая не дает покоя, если клиент на вашем хостинге, то вы подключаете ему этот модуль, а если он хочет уйти на свой хостинг, вы же не будете ему предоставлять место для хранения фильтров на vps.
Ну он не будет ничего загружать на мой хостинг и соответственно место не будет занимать. А к чему вопрос?
Александр Туниеков
07 апреля 2023, 06:11
0
Точки с запятой нет после инструкии $this->modx->log(1, print_r($success_page,1))
надо
$this->modx->log(1, print_r($success_page,1));
Александр Туниеков
07 апреля 2023, 06:01
0
А в MODX whereCondition вообще есть? я только xPDOQuery::where в гугле нахожу
Александр Туниеков
05 апреля 2023, 03:05
+1
Привет. Вопрос не до конца понял, но может так: вносятся данные в виде текста и селект нужен только в фильтре.
Тогда примерно так:
{'!getTable' | snippet : [
   'loadModels'=>'gtsShop',
   'showLog'=>1,
   'selects'=>[
      'test'=>[
         'type'=>'data',
         'rows'=>[
            ['test','test'],
            ['Oplata','Oplata']
         ]
      ]
   ],
   'table'=>[
        'class'=>'gsRaschet',
        'pdoTools'=>[
            'class'=>'gsRaschet',
        ],
        'autosave'=>1,
        'row'=>[
            'id'=>['filter'=>1],
            'name'=>[
                'edit'=>['type'=>'text'],
                'filter'=>[
                    'edit'=>['type'=>'select','select'=>'test']
                ]
            ],
        ]
    ]
]}
Александр Туниеков
29 марта 2023, 14:04
+2
Править исходники лучше только для теста. Если кто-то вздумает обновить mSearch2, то правка пропадет. Лучше расширить класс фильтрации
Расширяем класс фильтрации
Все стандартные фильтры mSearch2 находятся в файле /core/components/msearch2/model/msearch2/filters.class.php. Нам нужно унаследовать его, расширить и указать новый класс в системных настройках.

Создаём новый файл в /core/components/msearch2/custom/filters/custom.class.php и пишем в него:

<?php
class myCustomFilter extends mse2FiltersHandler {}

Указывем его в системной настройке mse2_filters_handler_class.

С этого момента mSearch2 использует для работы ваш класс фильтрации, в котором вы можете писать новые методы, или переопределять стандартные.

Для получения данных используются методы getИмяМетодаValues(), для подготовки фильтра — buildИмяМетодаFilter(), а для фильтрации filterИмяМетода. Можно посмотреть, как работают эти 3 типа методов в filters.class.php.
И прописать исправленный метод getTvValues в классе myCustomFilter.
<?php
class myCustomFilter extends mse2FiltersHandler {
/**
	 * Retrieves values from Template Variables table
	 *
	 * @param array $tvs Names of tvs
	 * @param array $ids Ids of needed resources
	 *
	 * @return array Array with tvs values as keys and resources ids as values
	 */
	public function getTvValues(array $tvs, array $ids) {
		$filters = array();
		$q = $this->modx->newQuery('modResource', array('modResource.id:IN' => $ids));
		$q->leftJoin('modTemplateVarTemplate', 'TemplateVarTemplate',
			'TemplateVarTemplate.tmplvarid IN (SELECT id FROM ' . $this->modx->getTableName('modTemplateVar') . ' WHERE name IN ("' . implode('","', $tvs) . '") )
			AND modResource.template = TemplateVarTemplate.templateid'
		);
		$q->leftJoin('modTemplateVar', 'TemplateVar', 'TemplateVarTemplate.tmplvarid = TemplateVar.id');
		$q->leftJoin('modTemplateVarResource', 'TemplateVarResource', 'TemplateVarResource.tmplvarid = TemplateVar.id AND TemplateVarResource.contentid = modResource.id');
		$q->select('TemplateVar.name, TemplateVarResource.contentid as id, TemplateVarResource.value, TemplateVar.type, TemplateVar.default_text');
		$tstart = microtime(true);
		if ($q->prepare() && $q->stmt->execute()) {
			$this->modx->queryTime += microtime(true) - $tstart;
			$this->modx->executedQueries++;
			while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
				if (empty($row['id'])) {
					continue;
				}
				elseif (is_null($row['value']) || trim($row['value']) == '') {
					$row['value'] = $row['default_text'];
				}
				if ($row['type'] == 'tag' || $row['type'] == 'autotag') {
					$row['value'] = str_replace(',', '||', $row['value']);
				}
				$tmp = strpos($row['value'], '||') !== false
					? explode('||', $row['value'])
					: array($row['value']);
				foreach ($tmp as $v) {
					$v = str_replace('"', '"', trim($v));
					if ($v == '') {
						continue;
					}
					$name = strtolower($row['name']);
					if($name == 'ten-long') $v=(int)$v;
					if (isset($filters[$name][$v])) {
						$filters[$name][$v][$row['id']] = $row['id'];
					}
					else {
						$filters[$name][$v] = array($row['id'] => $row['id']);
					}
				}
			}
		}
		else {
			$this->modx->log(modX::LOG_LEVEL_ERROR, "[mSearch2] Error on get filter params.\nQuery: ".$q->toSQL()."\nResponse: ".print_r($q->stmt->errorInfo(),1));
		}

		return $filters;
	}
}
Александр Туниеков
28 марта 2023, 22:40
+1
или лучше
if($name == 'ten-long') $v=(int)str_replace('мм','',$v);
Александр Туниеков
28 марта 2023, 22:27
+1
Странно, что вообще с мм работает. Как мфильтер вообще число получает???
попробуйте для теста в core\components\msearch2\model\msearch2\filters.class.php после 74 строки дописать
if($name == 'ten-long') $v=(int)$v;
https://disk.yandex.ru/i/eU3jzbcssEOc8w
Александр Туниеков
17 марта 2023, 13:22
0
Я учился писать под модекс на примере минишопа. Как писать под MODX3 есть вопросы. Думал полгода подожду выйдет минишоп3 и на его примере буду ваять. Полгода прошло а минишопа3 нет. А вопросы как писать остались. И как писать под MODX3 не понятно и даже возникает вопрос стоит ли вообще под него писать. С классами и отказом от addPackage они мне изрядную свинью подложили. У меня класс прописывается в параметрах сниппета и 1 сниппет работает с любым классом модели базы. А теперь не понятно как подлючить класс. Use переменная не работает
Александр Туниеков
17 марта 2023, 12:49
0
Нефига не понятно в консоле :-( попробуй минификацию скриптов отключить. Или попробуй плагины поочередно отключать. Может в них проблема
Александр Туниеков
15 марта 2023, 21:11
0
<?php
$ms = $modx->getService('miniShop2');
if($msOrder = $modx->getObject('msOrder',['num'=>'2303/41'])){
    echo "<p>{$msOrder->createdon}</p>";
}
Ну так дату можно получить заказа с номером 2303/41
А тебе зачем дату?