Вопросы
AjaxForm отображение загруженных файлов в адмике
Подскажите пжта, как реализовать возможность просмотра файлов, прикрепленных к форме, непосредственно в Formit? Сейчас в Formit отображается только наименование файла. Файлы успешно сохраняются на сервере, но открыть их через Formit не получается.
Сам вызов формы:
Сам вызов формы:
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.AjaxForm.template`
&hooks=`formit2file,FormItSaveForm,email`
&customValidators=`formit2checkfile`
&emailTpl=`tpl.email`
&formName=`JOB FROM SITE` &formFields=`name,age,message,upload_1`
&fieldNames=`name==Name,age==Age,message==About me,upload==Photo №1`
&validationErrorMessage=`The form contains errors!`
&successMessage=`Message sent successfully!`
&closeMessage=`Close message`
&errTpl=`[[+error]]`
]]Загрузка файлов посредством сниппета formit2file:<?php
// initialize output;
$output = true;
// valid extensions
$ext_array = array('jpg', 'jpeg', 'png');
// create unique path for this form submission
//$uploadpath = 'assets/uploads/';
// you can create some logic to automatically
// generate some type of folder structure here.
// the path that you specify will automatically
// be created by the script if it doesn't already
// exist.
// EXAMPLE:
// this would put all file uploads into a new,
// unique folder every day.
$uploadpath = 'assets/uploads/'.date('Y-m-d').'/';
// get full path to unique folder
$target_path = $modx->config['base_path'] . $uploadpath;
// get uploaded file names:
$submittedfiles = array_keys($_FILES);
// loop through files
foreach ($submittedfiles as $sf) {
// Get Filename and make sure its good.
$filename = basename( $_FILES[$sf]['name'] );
// Get file's extension
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$ext = mb_strtolower($ext); // case insensitive
// is the file name empty (no file uploaded)
if($filename != '') {
// is this the right type of file?
if(in_array($ext, $ext_array)) {
// clean up file name and make unique
$filename = mb_strtolower($filename); // to lowercase
$filename = str_replace(' ', '_', $filename); // spaces to underscores
//$filename = date("Y-m-d_G-i-s_") . $filename; // add date & time
// full path to new file
$myTarget = $target_path . $filename;
// create directory to move file into if it doesn't exist
if(!is_dir($target_path)) {
mkdir($target_path, 0755, true);
} else {
$modx->log(modX::LOG_LEVEL_ERROR, 'dossier existe' );
}
// is the file moved to the proper folder successfully?
if(move_uploaded_file($_FILES[$sf]['tmp_name'], $myTarget)) {
// set a new placeholder with the new full path (if you need it in subsequent hooks)
$modx->setPlaceholder('fi.'.$sf.'_new', $myTarget);
// set the permissions on the file
if (!chmod($myTarget, 0644)) { /*some debug function*/ }
} else {
// File not uploaded
$errorMsg = 'There was a problem uploading the file.';
$hook->addError($sf, $errorMsg);
$output = false; // generate submission error
}
} else {
// File type not allowed
$errorMsg = 'Type of file not allowed.';
$hook->addError($sf, $errorMsg);
$output = false; // generate submission error
}
// if no file, don't error, but return blank
} else {
$hook->setValue($sf, '');
}
}
return $output; Имя с формы в параметр emailFromName AjaxForm
Подскажите, как передать Имя с формы в параметр emailFromName AjaxForm (FormIt).
Пытаюсь таким образом:
Если задаю явно
Нужно чтобы то значение, что пользователь заполнил в форме приходило в письме, чтобы сразу было видно от кого (по имени) приходит письмо.
Пытаюсь таким образом:
'emailFromName' => $name,Приходит имя сайта, указанное в настройке site_name
Если задаю явно
'emailFromName' => '55555',То все приходит
Нужно чтобы то значение, что пользователь заполнил в форме приходило в письме, чтобы сразу было видно от кого (по имени) приходит письмо.
Отправить письмо после активации аккаунта
Здравствуйте.
На моём сайте активация аккаунта происходит не по ссылке из письма, а только самим администратором. Как я могу отправлять письма пользователям после активации их аккаунтов?
На моём сайте активация аккаунта происходит не по ссылке из письма, а только самим администратором. Как я могу отправлять письма пользователям после активации их аккаунтов?
Fenom не выводит плейсхолдеры в снипете ForgotPassword
Здравствуйте,
Подскажите пожалуйста, у меня Fenom не выводит плейсхолдер с ошибкой, при отправке пустой формы. При этом стандартный modx вызов работает нормально и выводит ошибку. Строка проверки находится в forgotPass_tpl
Fenom вызов выглядит так:
Подскажите пожалуйста, у меня Fenom не выводит плейсхолдер с ошибкой, при отправке пустой формы. При этом стандартный modx вызов работает нормально и выводит ошибку. Строка проверки находится в forgotPass_tpl
Fenom вызов выглядит так:
{set $errors = $_modx->getPlaceholder('loginfp.errors')}
{if $errors}<div class="alert alert-danger">{$errors}</div>{/if}MODx вызов:[[+loginfp.errors:notempty=`<div class="alert alert-danger">[[+loginfp.errors]]</div>`]]Вызов сниппета:{$_modx->runSnippet('!ForgotPassword', [
'resetResourceId' => $_modx->resource.id,
'loginResourceId' => $_modx->config.login_id,
'tpl' => 'forgotPass_tpl',
'sentTpl' => 'forgotPassSent_tpl',
'emailTpl' => 'forgotPassEmail_tpl',
'emailSubject' => $_modx->lexicon('login.reset_password'),
])} Вопрос по $options
Обратил внимание что в сниппете dateAgo есть такой код:
Или этот код позволяет использовать параметры сниппета в качестве модификатора?
if (!empty($options) && $options = $modx->fromJSON($options)) {
$scriptProperties = array_merge($scriptProperties, $options);
}Вопрос что это за переменная $options, чем она отличается от $scriptProperties?Или этот код позволяет использовать параметры сниппета в качестве модификатора?
Пошаговая работа скрипта в Console
Здравствуйте, необходимо выполнить данный скрипт
$q = $modx->newQuery('msProduct');
$q->where(array('parent' => '9'));
$col = $modx->getCollection('msProduct', $q);
foreach ($col as $item){
$oe_number = $item->get('oe_number');
$article = $item->get('article');
$old_price = $item->get('old_price');
$price = $old_price * 1.2;
$item->set('price', $price);
if (empty($oe_number)) {
$item->set('oe_number', $article);
}
$item->save();
}Но так как товаров порядка 30 000, то нужно разбить на пошаговое выполнение, нашел данную шпаргалку — ilyaut.ru/cheats/step-by-step-the-script-in-console/, но мозгов доделать не хватает, вот что получилось<?php
// Сколько ресурсов обрабатывать за раз
$step = 1;
// Если процесс уже остановлен, сбрасываем OFFSET
if (!isset($_SESSION['Console']['completed'])) {
$_SESSION['console_offset'] = 0;
}
$offset = isset($_SESSION['console_offset']) && $_SESSION['console_offset'] ? $_SESSION['console_offset'] : 0;
// Формируем запрос
$q = $modx->newQuery('msProduct');
$q->where(array('parent' => '9'));
$total = $modx->getCount('msProduct', $q);
// Пропускаем все уже обработанные объекты
$q->limit($step, $offset);
$resources = $modx->getCollection('msProduct', $q);
// Обработка
foreach ($resources as $resource){
$oe_number = $resource->get('oe_number');
$article = $resource->get('article');
$old_price = $resource->get('old_price');
$price = $old_price * 1.2;
$resource->set('price', $price);
if (empty($oe_number)) {
$resource->set('oe_number', $article);
}
$resource->save();
print "<p>Processing resource <b>".$resource->get('pagetitle')."</b></p>";
}
// Меняем offset
$_SESSION['console_offset'] = $offset + $step;
if ($_SESSION['console_offset'] >= $total) {
$sucsess = 100;
$_SESSION['Console']['completed'] = true;
unset($_SESSION['console_offset']);
} else {
$sucsess = round($_SESSION['console_offset'] / $total, 2) * 100;
$_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
if ($i <= $sucsess) {
print '=';
} else {
print '_';
}
}
$current = isset($_SESSION['console_offset']) ?
$_SESSION['console_offset'] :
($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";Подскажите, как правильно написать пошаговое выполнение скрипта Формирование ЧПУ в Тикетах
Возникла проблема, вернее отсутствие логики в тикетах
Прошу подсказать того, кто разбирается в этом.
Есть раздел с тикетами, в котором присутствуют подкатегории, тоже тикеты
Например
— Родитель
----Подкатегория
----Подкатегория
----Подкатегория
и т.д.
В подкатегориях убрал галочку Использовать псевдоним в пути псевдонимов.
Но при создании тикета в одной из подкатегорий, URL все равно формируется так
/Родитель/Подкатегория/Тикет
Как исправить? Это глюк или так и должно быть?
Нужен такой вариант /Родитель/Тикет
Но тикеты должны быть в разных разделах
Прошу подсказать того, кто разбирается в этом.
Есть раздел с тикетами, в котором присутствуют подкатегории, тоже тикеты
Например
— Родитель
----Подкатегория
----Подкатегория
----Подкатегория
и т.д.
В подкатегориях убрал галочку Использовать псевдоним в пути псевдонимов.
Но при создании тикета в одной из подкатегорий, URL все равно формируется так
/Родитель/Подкатегория/Тикет
Как исправить? Это глюк или так и должно быть?
Нужен такой вариант /Родитель/Тикет
Но тикеты должны быть в разных разделах
помогите кто нибудь с базой данных
, в phpmyadmin удалили пользователя root, и все базы данных пропали// однако modx работает както// вопрос такой — возможно ли вытянуть базу из modx?
Не передаются значения TV при фильтрации
Почти что победил TagManager2 — фильтры отображаются, все фильтруется. Но когда фильтруешь товары, исчезают значения TV из отображения карточки товара. Жмешь Enter в адресной строке браузера по сформированной TM2 ссылке и значения TV появляются. Подскажите, в чем может быть проблема?
Чанк товара:
Чанк товара:
<div class="col-xl-4" style="padding-left: 5px; padding-right: 5px; float: left;">
<div class="post-02 post-02__style-02 js-post-effect">
<div class="post-02__media">
<a href="[[~[[+id]]]]">
[[getImageList?
&tvname=`slider`
&docid=`[[+id]]`
&limit=`1`
&tpl=`@CODE:<img src="[[+slide]]" alt="[[+alt]]" />`
]]
</a></div>
<div class="post-02__body">
<h2 class="post-02__title"><a href="[[~[[+id]]]]">[[!pdoField? &id=`[[+id]]` &field=`name`]]</a></h2>
<div class="post-02__department">[[!pdoField? &id=`[[+id]]` &field=`seo_tag`]]</div>
<div class="post-02__content">
<div class="post-02__description">
[[pdoField:ellipsis=`200`? &id=`[[+id]]` &field=`specification`]]
<ul>
<li><span class="primary-color">Age</span>[[!pdoField? &id=`[[+id]]` &field=`age`]]</li>
<li><span class="primary-color">Height</span>[[!pdoField? &id=`[[+id]]` &field=`height`]] cm</li>
<li><span class="primary-color">Weight</span>[[!pdoField? &id=`[[+id]]` &field=`weight`]] kg</li>
</ul>
</div>
<a class="post-02__link" href="[[~[[+id]]]]">View detail</a>
</div>
</div>
</div>
</div>Вывод TMFilters:<div id="filters">
[[tmFilters?
&filterOuterTpl=`tm2_filterOuterTpl`
&filterTpl=`tm2_filterTpl`
&filterNumericOuterTpl=`tm2_filterOuterTpl`
&filterNumericTpl=`tm2_filterNumericTpl`
&jsMap=`1`
&jsScript=`0`
&toPlaceholder=`filters`
]]
<form action="[[~[[*id]]]]" method="get">
<input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" />
[[+filters]]
<button class="btn btn-info" type="button" onclick="tmFilters.resetFilters(); return false;">Сбросить фильтр</button>
</form>
</div> Обновление цен в Minishop2
Добрый день!
Буду благодарен, если кто-то предложить оптимальное решение вопроса.
Есть сайт аптеки — магазин на Minishop2.
Требуется еженедельная синхронизация цен аптечной базы с ценами сайта.
Существующее решение:
1. На сайте установлено дополнение msImportExport;
2. Из внешней базы данных аптеки выгружается таблица с данными (Артикул, Наименование, Цена, Производитель и т.д.);
3. Товарам на сайте присвоены артикулы, идентичные товарам из внешней базы данных;
4. Таблица переводится в формат msImportExport и по критерию совпадения артикула происходит изменение цены товара на сайте на актуальную.
Буду благодарен, если кто-то предложить оптимальное решение вопроса.
Есть сайт аптеки — магазин на Minishop2.
Требуется еженедельная синхронизация цен аптечной базы с ценами сайта.
Существующее решение:
1. На сайте установлено дополнение msImportExport;
2. Из внешней базы данных аптеки выгружается таблица с данными (Артикул, Наименование, Цена, Производитель и т.д.);
3. Товарам на сайте присвоены артикулы, идентичные товарам из внешней базы данных;
4. Таблица переводится в формат msImportExport и по критерию совпадения артикула происходит изменение цены товара на сайте на актуальную.