Aleksandr Huz

Aleksandr Huz

С нами с 02 августа 2014; Место в рейтинге пользователей: #21
Aleksandr Huz
20 августа 2018, 15:58
+1
Андрей, спасибо за компонент.
Есть несколько замечаний:
1. Как-то странно, что в шаблонах вы используете Fenom, а в чанках стандартный синтаксис.
2. В одном месте вы пишите $_modx, в другом $modx. Например здесь
Aleksandr Huz
23 июля 2018, 13:18
0
Ну а если вот так
&where=`{"tv.available":1}`
Aleksandr Huz
11 июля 2018, 10:34
+3
А мне логотип сразу понравился, очень крутой.
Aleksandr Huz
04 июля 2018, 14:03
0
А если добавить очистку кеша для настроек?
$modx->cacheManager->refresh(array('system_settings' => array()));
Aleksandr Huz
04 июля 2018, 10:07
1
+1
Мое решение:
1. В форму вставляем скрытое поле с файлом
<input type="hidden" name="attach_file" value="IMG_1035.JPG" />

2. Удаляем хук email

3. Добавляем свой хук (email_file)
<?php
$pdo = $modx->getService('pdoTools');
$siteName = $modx->getOption('site_name');
$emailsender = $modx->getOption('emailsender');
$emailTo = $modx->getOption('emailTo', $scriptProperties, $emailsender, true);
$fields = $hook->getValues(); 
$message = $pdo->getChunk('email', $fields);
$subject = $modx->getOption('emailSubject', $scriptProperties, $siteName, true);

$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY, $message);
$modx->mail->set(modMail::MAIL_FROM, $emailsender);
$modx->mail->set(modMail::MAIL_FROM_NAME, $siteName);
$modx->mail->set(modMail::MAIL_SUBJECT, $subject);
$modx->mail->address('to', $emailTo);
$modx->mail->address('reply-to', $emailsender);
if(!empty($fields['attach_file'])) {
    $modx->mail->attach($modx->getOption('base_path').$fields['attach_file']);
}
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
  $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
return true;
Aleksandr Huz
30 июня 2018, 13:02
+1
Да, вы правы.
Нужно вот так
<?php
/** @var modX $modx */
if($modx->event->name == 'OnDocFormRender') {
        
    // Прячем TV для всех контекстов, кроме web(ru)
    if(!$resource) return; // Выходим, если это новый ресурс
    if($resource->get('context_key') !== 'web') {
        $hideTV = 'MODx.hideTV("tv20");'; // 20 - id tv

        $modx->regClientStartupHTMLBlock("<script>
            Ext.onReady(function(){ 
                $hideTV 
            });
        </script>");
    }
}
Aleksandr Huz
30 июня 2018, 12:15
0
Да, вместо 20 поставить 19.
$hideTV = 'MODx.hideTV("tv19");';
Вы включили событие OnDocFormRender для плагина?
Aleksandr Huz
30 июня 2018, 09:17
0
Через плагин можно:
<?php
/** @var modX $modx */
if($modx->event->name == 'OnDocFormRender') {
        
    // Прячем TV для всех контекстов, кроме ru
    if($modx->getOption('cultureKey') !== 'ru') {
        $hideTV = 'MODx.hideTV("tv20");'; // 20 - id tv

        $modx->regClientStartupHTMLBlock("<script>
            Ext.onReady(function(){ 
                $hideTV 
            });
        </script>");
    }
}
Aleksandr Huz
29 июня 2018, 16:09
+2
Еще одна таблица нужна — modTemplateVarResource
<?php
$art = 23; // id tv
$query = $modx->newQuery('msProduct');
$query->leftJoin('msProductData', 'Data');
$query->leftJoin('modTemplateVarResource', 'art', 'msProduct.id = art.contentid AND art.tmplvarid = ' . $art);
$query->groupby('msProduct.id');
$query->where(array(
    'msProduct.parent:IN' => [10, 20],
    'Data.price' => '60',
    'art.value' => '10'
));
$products= $modx->getCollection('msProduct', $query);
 
foreach ($products as $k => $product) { 
    $title = $product->get('pagetitle');
}
Aleksandr Huz
28 июня 2018, 13:06
0
Артем, я ошибся, нужно не только поменять функцию ready, а и удалить анонимную функцию, которая оборачивает весь код или удалить параметр jQuery из функции.
Aleksandr Huz
27 июня 2018, 19:13
0
Ну конечно можно))))
{'pdoResources' | snippet: [
    'parents' => 7,
    'includeTVs' => 'migx_tv',
    'tpl' => '@INLINE {set $output = $_modx->getPlaceholder("output")?:[]}{set $output[$id] = $_pls["tv.migx_tv"]}{$_modx->setPlaceholder("output", $output)}'
]}
И получаем плейсхолдер с готовым массивом
{$_modx->getPlaceholder('output')}

Обратите внимание, что ключи полученного массива — это id ресурса. Но можно и не указывать ключ))
set $output[$id] = ...
Aleksandr Huz
27 июня 2018, 12:28
0
Круто. Спасибо)
Aleksandr Huz
27 июня 2018, 11:31
0
Артем, привет.
Есть несколько вопросов.

1. Зачем 2 раза регистрировать скрипт?
$modx->regClientScript($js);
if (preg_match('/\.js$/i', $js)) {
	$js .= '?v=' . substr(md5($version), 0, 10);
}
$modx->regClientScript($js);

2. Если jquery загружать асинхронно(defer), то код не сработает.
Если поменять функцию ready то все будет работать.
$(document).ready(function ($) {
     modAlertify.initialize();
});
на
document.addEventListener('DOMContentLoaded', function(){
     modAlertify.initialize();
});

Aleksandr Huz
27 июня 2018, 11:01
0
Для вывода ресурсов можно воспользоваться сниппетом pdoResources
В чанке получаем tv каждого ресурса, для этого прописываем название tv в параметре includeTVs
Aleksandr Huz
25 июня 2018, 11:42
+2
Поздравляю!
Очень интересно, сколько же действительно в магазине дополнений))
Картинка кликабельна.
Aleksandr Huz
25 июня 2018, 11:36
+1
Покажите исходный код.
Вы поменяли $item на $galItem?
Aleksandr Huz
24 июня 2018, 14:41
1
+1
Потому что, нужно так:
'id' => $id,