Алексей Соин

Алексей Соин

С нами с 10 февраля 2016; Место в рейтинге пользователей: #60
Отправить деньги

Организация рутины при свежей установке modx.

Хочу поделиться скриптами для организации рутины при свежей установке и настройке сайта на modx, как раз проскочил вопрос в сообществе.

Скрипты можно запустить на свежей установке через консоль сервера, ну или вызывать в браузере страницу, предварительно отредактировав список опций.
По умолчанию все настройки рассчитаны на корень сайта example.com/packages.php
На локальном сервере php5-fpm nginx настроенном по инструкции Bezumkin все работает отлично.
Abu
Abu
23 марта 2015, 23:29
modx.pro
42
5 791
+11

Как начать участвовать в Open Source

Какое-то время назад я считал, что порог вхождения в OpenSource-разработку очень высок — ведь надо использовать git, отправлять пулл-реквесты. Это было чем-то незнакомым, далеким и останавливало меня. Тем более, что весь github.com на английском и многие слова и, соответственно, функции непонятны.

Однако сейчас я понимаю, как ошибался. Надеюсь, что после этой статьи вы согласитесь со мной и начнете вносить свой вклад в сообщество Open Source (и сообщество MODX в частности). Предлагаю на примере разобрать, как помочь разработчикам радовать нас дополнениями и уроками.
Илья Уткин
25 апреля 2014, 00:14
modx.pro
14
6 145
+9

Вывод RSS сайта через pdoResources

Честно говоря, я не очень люблю всякие рассылки и подписки, мне больше нравится использовать RSS.

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

Им очень удобно пользоваться — нужно просто зайти скопировать ссылку и вставить её в свой агрегатор новостей, например www.inoreader.com.
Для пущего удобства можно еще установить расширение для Chrome, чтобы вас регулярно уведомляли о свежих записях.

А теперь давайте посмотрим, как можно генерировать RSS с помощью pdoResources.
Василий Наумкин
24 апреля 2014, 07:18
modx.pro
23
7 729
+3

РЕШЕНО - Загрузка картинок из фроненда

Доброго времени суток. Нагуглил такие вот сниппеты для создания ресурсов из фронтенда:

1 — Отвечает за заполнение указаных в ФормИТ полей:

<?php
$doc = $modx->getObject('modResource',array('id'=>$hook->getValue('resource_id')));
if (empty($doc)){
    $doc = $modx->newObject('modResource');
    $doc->set('createdby', $modx->user->get('id'));
}
else{
    $doc->set('editedby', $modx->user->get('id'));
}
$allFormFields = $hook->getValues();
foreach ($allFormFields as $field=>$value)
{
   if ($field !== 'spam' && $field !== 'resource_id'){
         $doc->set($field, $value);
    }
}
$alias = $doc->cleanAlias($fields['pagetitle']);
if($modx->getCount(modResource, array('alias'=>$alias))!= 0) {
$count = 1;
$newAlias = $alias;
while($modx->getCount(modResource, array('alias'=>$newAlias))!= 0) {
$newAlias = $alias;
$newAlias .= '-' . $count;
$count++;
}
$alias = $newAlias;
}
$doc->set('alias',$alias);
$doc->set('template', $template);
$doc->save();
foreach ($allFormFields as $field=>$value)
{
    if (!empty($value) && $tv = $modx->getObject('modTemplateVar', array ('name'=>$field)))
    {
        /* handles checkboxes & multiple selects elements */
        if (is_array($value)) {
            $featureInsert = array();
            while (list($featureValue, $featureItem) = each($value)) {
                $featureInsert[count($featureInsert)] = $featureItem;
            }
            $value = implode('||',$featureInsert);
        }
        $tv->setValue($doc->get('id'), $value);
        $tv->save();
    }
}
$modx->cacheManager->refresh();
return true;


2 — загружает файлы на сервер и забивает путь к ним в нужные ТВ:

<?php
// initialize output;
$output = true;
$counter = 1;
// valid extensions
$ext_array = array('jpg', 'png', 'gif', 'jpeg', 'JPG', 'PNG', 'GIF', 'JPEG');
$mydir = $modx->user->get('id'); // Path from root that user specifies
// create unique path for this form submission
$uploadpath = 'assets/uploads/'.$mydir.'/';
// 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 = $counter . '.' . $ext;
            $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
            mkdir($target_path, 0755, true);
            // 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)
                $myFile = $uploadpath . $filename;
                $hook->setValue($sf,$myFile);
                // 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, '');
    }
$counter = $counter + 1;
}
return $output;


2й мне нужен только для загрузки картинок, но он вставляет в ТВ строчку, подобную этой:

london_lights_by_bluerain0789-d5hn65m.jpg||image/jpeg||D:\OpenServer\userdata\temp\php873C.tmp||0||5460308
Что приводит к полному провалу все затеи. Я пытался копать в сторону проблем загрузки файлов наОпенСервере, но ничего не нагуглил, к сожалению. В другие ТВ, например, цена, вставляется все нормально.
MrKarandash
07 октября 2013, 21:22
modx.pro
1
2 167
0

Как не хакать сторонние классы

Бывает, что вы используете какой-то сниппет или компонент, и он немного вас не устраивает. Вам нужно поправить буквально пару строк, но вы понимаете, что при обновлении эти измения пропадут.

Что же делать?
Все просто — нужно расширить сторонний класс своими методами. По сути, это очень похоже на «классные процессоры», только без процессоров и использовать можно везде — это стандартная возможность ООП.
Василий Наумкин
30 июня 2012, 12:21
modx.pro
53
7 919
0

Основы Ajax

Ajax — это метод асинхронного запроса к серверу. Текущая страница html с помощью скрипта обращается к серверу с определенным вопросом, получает ответ и что-то с ним делает. Обычно — вставляет результат в страницу.
Василий Наумкин
18 июня 2012, 08:04
modx.pro
36
30 619
0