R2m0x94 (Vasily)

R2m0x94 (Vasily)

С нами с 07 мая 2018; Место в рейтинге пользователей: #362

Добавление своих полей в форму заказа [обновлено]

При разработке нескольких проектов, возникала необходимость в получении дополнительных данных от покупателей, а полей в miniShop2 ограниченное количество. Поиск готового решения результата не дал, поэтому предлагаю свой вариант.

Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей

Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.

Более подробно далее
Дмитрий Меркурьев
11 октября 2016, 16:38
modx.pro
97
19 973
+11

создание программно товара miniShop2

Добрый день!
Подскажите как создать программно товар. В принципе товар я создаю через стандартный modx процессор
$response = $modx->runProcessor('resource/create', array(
            'class_key' => 'msProduct',
            'pagetitle' => 'Товар',
            'parent' => 55,
            'template' => 11,
            'show_in_tree' => 1,

            //Данные
            'price' => 100,
    
        ));
        
        if($response->isError()){
            echo 'Ошибка';
        }else{
            echo 'Создал';
        }
Каким образом добавить (указать в процессоре) один цвет и ОДНО изображение? Возможно ли через modx процессор (возможно надо использовать miniShop-ий процессор) создать товар с этими заполненными данными. Подскажите...)
Владимир Бабусенко
14 сентября 2016, 12:42
modx.pro
6
6 611
0

[Решено] Дополнительные поля в Tickets

Всем привет! Создаю форму добавления объявлений, добавил новые TV поля таким образом:

<input type="text" name="tv_price" value="0" />
где tv_price название tv параметра, но при сохранении сохраняет только значение value по умолчанию, тоесть 0. Не могу разобраться, как прописать name правильно tv.price или tvprice?

UPD: Всё оказалось намного проще. Выводим TicketForm с параметрами:

[[!TicketForm?
&requiredFields=`parent,pagetitle,content,bprice,bcountry,bregion,bcity`
&allowedFields=`parent,pagetitle,content,published,bprice,bcountry,bregion,bcity`
&parents=`322,335,338,345,351,352,353,354,355,356,357,358,361,365,369,373`
]]
а в чанке который выводит форму прописываем TV-параметры в name без префиксов tv., tv_ а как есть:

<input type="text" name="bprice" value="0">
Андрей Копп
19 августа 2016, 23:01
modx.pro
6
1 871
+1

mFilter2 и кастомные таблицы

Вчера начал делать фильтрацию таблицы с фирмами на mFilter2. Сначало я создал файл кастомного класса:

core/components/msearch2/custom/filters/custom.class.php со следующим содержимым:

<?php
class CustomFilter extends mse2FiltersHandler {
    
	function __construct(mSearch2 &$mse2,array $config = array()) {
        parent::__construct($mse2, $config);
        $this->modx->addPackage('spromo' ,MODX_CORE_PATH.'components/spromo/model/');
        $this->modx->addPackage('gl' ,MODX_CORE_PATH.'components/gl/model/');
        $this->modx->addPackage('voteforms' ,MODX_CORE_PATH.'components/voteforms/model/');
    }
    
	public function getSpromoCompaniesValues(array $fields, array $ids) {
		$filters = array();
		$no_id = false;
		if (!in_array('id', $fields)) {
			$fields[] = 'id';
			$no_id = true;
		}
		$q = $this->modx->newQuery('SpromoCompanies');
		$q->select(implode(',', $fields));
		$q->where(array('SpromoCompanies.id:IN' => $ids));
		$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)) {
				foreach ($row as $k => $v) {
					$v = trim($v);
					if ($k == 'category_id') {
						if ($row['parent'] == $v) {continue;}
						else {$k = 'parent';}
					}
					if ($v == '' || ($k == 'id' && $no_id)) {
						continue;
					}
					elseif (isset($filters[$k][$v])) {
						$filters[$k][$v][] = $row['id'];
					}
					else {
						$filters[$k][$v] = array($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;
	}
}
Андрей Копп
30 июля 2016, 12:49
modx.pro
4
2 828
+1

Дополнительные поля профиля юзера (не extended)


Разрабатываю проект, в котором необходимо было реализовать более простое редактирование дополнительных полей профиля, чем есть из коробки. К слову, неудобное редактирование — это не единственный минус нативного способа расширения профиля полями. Ни для кого не секрет, что фильтрацию по JSON полям нормально не осуществить, только костылями. Фактически, мне надо было получить решение, которое бы расширяло стандартный код MODX, не трогая исходники, дабы сохранить карму в порядке возможность обновления системы.
Пришёл к выводу, что буду расширять стандартную вкладку профиля «Общая информация». При желании можно чуть переписать код в событии OnUserFormPrerender и создать свою вкладку со своими полями.
Павел Гвоздь
30 мая 2016, 22:36
modx.pro
115
19 573
+19

Расширение pdoTools

Представляю законченное решение для работы с файловыми элементами, собранное в пакет. Оно добавляет в pdoTools модификаторы chunk, snippet, template и code. Синтаксис точно такой же, как и в pdoTools — в названии элементов можно вставлять префиксы @FILE, @INLINE, @CODE и т.д. Поэтому вызовы элементов, описанные в прошлой статье, теперь немного изменились.
Сергей Шлоков
18 мая 2016, 06:54
modx.pro
7
3 162
+4

Как в плагине поменять статус заказа minishop2?

Собственно вопрос в заголовке
Дмитрий Кондаков
17 мая 2016, 13:14
modx.pro
3
4 452
-1

Cron и работа с modx

Приветствую!
Задача сама простая, есть параметр 'counterQuote'. Нужно получать его значение и увеличивать на 1 каждый день. Крон работает норм, отчеты о работе приходят, в них весь «index.php», но нужного результата нет.

//Подключение
require '---- /public_html/index.php';

//Получение параметра и увеличение на 1
$counterQuote = $modx->getObject('modSystemSetting',array('key' => 'counterQuote'));
$counterQuote->set('value',$counterQuote->get('value')+1);
$counterQuote->save();

//Обновление кеша
$cacheRefreshOptions =  array( 'system_settings' => array() );
$modx->cacheManager->refresh($cacheRefreshOptions);
Ошибок не выдает, но и не увеличивается. Как сниппет в модх запускать, то все здорово.
Что еще надо сделать, чтобы заработало?
Константин Ильин
18 марта 2016, 17:39
modx.pro
3
3 670
+1

Закрываем служебные директории MODX в Apache

В одной статье, касающейся безопасности, Василий дал очень хорошую рекомендацию по защите служебных папок. Реализовав это на своём хостинге, решил написать инструкцию, так как начинающие изучать MODX могут столкнуться с ошибкой 404, как Я например.
Борода
01 марта 2016, 10:41
modx.pro
32
6 795
+5

Настройка fileAttach

Всем привет. Прошу помочь мне с настройкой fileAttach.
Контекст использования: Хотел сделать папку downloads, куда сливать документы, картинки, схемы, а потом давать ссылки для скачивания на нужные документы в своих постах.
Что сделал:
1. Поставил fileAttach.
2. Создал источник фалов назвал Downloads, выставил ему тип «Присоединенные файлы». Параметры не трогал.
3. Создал папку в файловой системе assets/downloads/
4. В системных настройках fileattach изменил:
-download — нет
-files_path — assets/downloads/
-mediasource — 4 (id источника, который я создал)
-private — нет
-templates — 3 (нужный мне)

При попытке загрузки файла ошибка Internal Server Error.
В логе:
[2016-02-20 06:03:12] (ERROR @ /connectors/index.php) msResourceFile::load() is not a valid static method.
[2016-02-20 06:03:12] (ERROR @ /connectors/index.php) Could not load class: msResourceFile from mysql.msresourcefile.
Виталий Барышников
20 февраля 2016, 03:11
modx.pro
4
2 865
0