Статьи об IT

Web-программирование - Шпаргалки и простые примеры: php, vue, html, css, modx, javascript - MODx

И вначале реклама, небольшой блок. Прошу не сердиться и не вносить ее в фильтры блокировщиков.

подробнее о рекламодателе можно узнать внутри блока
Спасибо. А теперь сам материал.

Стоит заметить, что я не супер профессионал разработчик modx и прошу прощения у сообщества, случайно сюда зашедшего и посмеявшегося над моими примерами кода. Да, у меня есть свои компоненты для modx, которые я для себя использую, однако я прекрасно понимаю, что они далеки от идеала и от грамтного написания и поэтому еще раз, прошу прощения! Просто мне нравится сам подход modx и возможность самореализации и кодинга.

 Столкнулся с такой задачей: у меня подгружаются картинки пользователем и неизвестно какой будет у них тип файла. Условно говоря mixed filetypes , а превьюхи создаются с помощью pthumb, который ругается, если неявно указан тип. Ошибка, что-то типа Unable to open image... и т.д. Одно из решений сделать конвертер, чтобы все файлы переводились в один тип, например в webp. Мною же был написан костыль, который, разумеется, чуть замедляет работу, но работает. Это сниппет, который получает адрес картинки, смотрит ее тип и задет фильтр. 

 

$imageInfo = getimagesize($modx->stripTags($input));
$imageType = $imageInfo['mime'];
$paramW = $modx->stripTags($w);
$options = 'w=' . $paramW; 

switch ($imageType) {
case 'image/jpeg':
$options .= '&f=jpeg';
break;
case 'image/webp':
$options .= '&f=webp';
break;
case 'image/png':
$options .= '&f=png';
break;
default:
break;
}

$params = array(
'input' => $input,
'options' => $options,
);
$img = $modx->runSnippet('pthumb', $params);
return $img;

Вызывается  примерно так:

<img src="/[[!ImageTypeforThumb? &input=`[[+tv.imgItem]]` &w=`170`]]" data-alt="[[+pagetitle]]" class="m-3" >

Что он делает, отправляет картинку, разбирает ее, собирает параметры и возвращает уже созданный thumbs. Понимаю, что решение возможно глупое, но было сделано на скорую руку. 

 

Далее, была у меня проблема в связке QuickEmail и доменной почтой с mail.ru - Письма не отправлялись никак. 

1. В mail.ru заходим под необходимым почтовым ящиком

2. Заходим в раздел Пароль и Безопасность -> Внешние сервисы и разрешаем доступ по smtp

3. Далее заходим Пароль и Безопасность -> Пароль для внешних приложений и создаем пароль для modx и smtp (потребуется привязка телефона. далее называем этот пароль и получаем)

4. В настройках modx, в разделе Авторизация и безопасность в ключе emailsender указываем эту почту

5. В настройках modx, в разделе Почта:
SMTP аутентификация - ДА
Авто TLS для SMTP - ДА
SMTP Helo сообщение - smtp.mail.ru
SMTP хосты - ssl://smtp.mail.ru
SMTP пароль - созданный пароль для внешних приложений
SMTP номер порта - 465
mail_smtp_prefix - ssl
SMTPS - ssl
SMTP посылать по одному - ДА
SMTP пользователь - email как в emailsender выше (ну или ваш почтовый ящик)
Использовать SMTP - ДА

Так же потом в mail.ru можно в разделе Пароль и Безопасность видеть все отправленные письма (а точнее историю активности). Промучался с этим долго

Пример отправки с QuickEmail в сниппете хорошо расписан у разработчика и повторять нет смысла. Но ладно, пример:

 

$props = array(
'debug' => '0',
'hideOutput' => '0',
'message' => 'Кто-то заполнил и отправил сюда. Новый клиент.',
'subject' => 'Новый клиент с сайта',
'to' => 'email куда',
'fromName' => 'От кого',
'emailSender' =>  'email ваш',
'replyTo' => 'email',
'html' => '1',
'failureMessage' => 'Mail Failed',
'successMessage' => 'Ваше сообщение успешно отправлено, мы свяжемся с вами в самое ближайшее время',
'errorHeader' => 'Mail error:',
'smtpErrorHeader' => 'SMTP server report:',
);

$output = $modx->runSnippet('QuickEmail',$props);

Создаем свой класс и проверяем, modx переменная уже определена или ее необходимо определить (например я свой класс использую как внутри modx, так и при работе Cron, Надеюсь правильно написал :-)

 

protected $modx;
public function __construct()
    {
        define('MODX_API_MODE', true);
        require_once(dirname(__DIR__, 4) . '/config.core.php');
        require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
        if(isset($GLOBALS['modx'])){
        global $modx;
        $this->modx = $modx;
        } else {
          $this->modx = new modX();
        }
	}

Внимание, есть официальная страница как использовать modx вне системы modx. Следуйте больше ему Для версии 3

 

По разному используем PdoTools

 


//Получили в чанке дату и форматируем ее. Здесь и далее $_pls - плейсхолдер
{$_pls['date'] | date_format : '%B, %Y'}
//Форматируем дату с помощью Шикарного дополнения DateAgo
{$_pls['date'] | dateago:'{"dateNow":0,"dateDay":"","dateFormat":""j F, H:i"}'}
//Проверяем на пустоту плейсхолдер
{if $_pls['param'] is not empty}{/if}
//Подключаем свой лексикон в чанке
{$_modx->lexicon->load('NameSpasesMy:default')} // или любой другой словарь вместо default
//запускаем сниппет 
{$_pls['team_logo'] | pthumb : 'h=15'} 
//используем компонент mobiledetect
{if 'standard' | mobiledetect}{/if}
if 'mobile' | mobiledetect} {/if}

 

Очистить переменную можно с помощью $modx->stripTags. Я лично параноидально делаю

 

$statusId = $modx->stripTags(htmlentities($_POST['statusId']));

 

Допишу про все xpdo которые пользуюсь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Похожее

draw I
draw I
draw I
draw I

 quote a81ca

Если вдруг вам было здесь полезно, уютно и приятно, что захотелось меня отблагодарить - вы можете пожертвовать мне на кофе.

 

i

Будет осуществлен переход на сайт Yoomoney

 

draw I

 


Внимание: На сайте могут присутствовать ссылки ePN

Мини-портфолио

очередной бесполезный блог