Bluetenstadt

Bluetenstadt

С нами с 01 марта 2016; Место в рейтинге пользователей: #396
Александр Наумов
28 июня 2017, 10:30
2
+2
#!/bin/bash

dir=/var/www/site
user=root

echo "Set permissions for $dir...";
echo "CHOWN files...";
chown -R $user:$user "$dir";
echo "CHMOD directories...";
find "$dir" -type d -exec chmod 0755 '{}' \;
echo "CHMOD files...";
find "$dir" -type f -exec chmod 0644 '{}' \;
Илья Уткин
16 декабря 2016, 07:53
1
+1
Поменяйте первую строчку на
if (isset($hook) && $hook) {

Или измените в системных настройках уровень вывода ошибок. По умолчанию MODX нотисы не показывает же.
Настройка log_level — поставьте 1.
Василий Наумкин
12 ноября 2016, 10:27
4
+9
Покопался в исходниках и написал пока такой фикс xPDO::getCriteria():
public function getCriteria($className, $type = null, $cacheFlag = true)
{
    $c = $this->newQuery($className);
    $c->cacheFlag = $cacheFlag;
    if (!empty($type)) {
        if ($type instanceof xPDOCriteria) {
            $c->wrap($type);
        } elseif (is_array($type)) {
            $tmp = array();
            array_walk_recursive($type, function ($v, $k) use (&$tmp) {
                if (!is_numeric($k)) {
                    $tmp[$k] = $v;
                }
            });
            if (count($tmp)) {
                $c->where($tmp);
            }
        } elseif (is_scalar($type)) {
            if ($pk = $this->getPK($className)) {
                $c->where(array($pk => $type));
            }
        } else {
            $c->where($type);
        }
    }

    return $c;
}
Это запрещает все запросы на получения объекта xPDO произвольным SQL запросом. Можно использовать либо первичные ключи, либо массивы с прописанными ключами, которые будут проверены при запросе.

По моим тестам работает хорошо, желающие могут проверить на себе — это файл core/xpdo/xpdo.class.php. Предложил код автору xPDO, буду ждать ответа.
Stan Ezersky
21 сентября 2016, 20:37
1
+1
Идеальный robots.txt

User-agent: *
Host: site.ru
Sitemap: site.ru/sitemap.xml

При указание запрета на служебные директории — вы показываете эти директории злоумышленникам.

Поисковики служебные директории не проиндексируют, они 403 возвращают
Игорь Терентьев
29 июля 2016, 20:30
1
+1
Если используется тег base в head, то нужно адреса сайтов указывать с http://
<a href="http://[[*createdby:userinfo=`website`]]" target="_blank">[[*createdby:userinfo=`website`]]</a>
Дмитрий
21 июля 2016, 11:28
1
+1
[[ms2Gallery?
	&limit=`1`
	&tplRow=`pervoe.news.tpl`
	&tplOuter=`0`
	&tplEmpty=`0`
	
]] 

[[*content]]

[[ms2Gallery?
	&tplRow=`news.tpl.row`
	&tplOuter=`news.tpl.outer`
	&tplEmpty=`0`
	&offset=`1`
]]
Андрей
21 июля 2016, 11:04
1
+1
Два вызова
1. &limit=`1`
2. &offset=`1`
Павел
13 июля 2016, 15:47
1
+2
Да… вот описал в статье… только для одной картинке пока, для более и двух не требовалось.
Напишу сюда пожалуй ещё:

Для начала создадим новую ТВ — назовём её «photo» (тип: изображение).

Затем давайте откопируем tpl для создания новых тикетов «tpl.Tickets.form.create» и назовём его «tpl.Tickets.form.create.my».

А теперь зайдём в эту tpl и добавим новое поле в нужное место.

<div class="form-group">
    <label for="ticket-photo">Изображение</label>
    <input type="file" class="form-control" name="photo" id="ticketphoto"/>
    <span class="error" id="error_ticketphoto"></span>
</div>
Также добавим атрибут «enctype» в тег формы, чтобы она могла поддерживать загрузку файлов на сервер.

<form class="well create" method="post" action="" id="ticketForm" enctype="multipart/form-data" >
Вызов сниппета соответственно такой:
[[TicketForm?
    &tplFormCreate=`tpl.Tickets.form.create.my`
]]
Отлично, новое поле у нас в форме есть. Но чтобы оно загрузилось, мы должны написать плагин, который будет срабатывать на событие «создания нового документа», а именно «OnDocFormSave».

Данный плагин будет получать глобальный массив $_FILES, с помощью которого будем получать все данные загруженного файла, а затем переносить этот файл в нужное место с новым именем и с дальнейшей записью его пути в нашу TV.

Сам плагин (событие — OnDocFormSave)

<?php
if ($modx->event->name == 'OnDocFormSave') {
      if($mode == 'new'){  
        if (!empty($_FILES)) { 
             
            $id = $resource->get('id');
            $folder = 'uploads'; // имя папки куда грузить, должна быть создана (в корне сайта)
            $path = MODX_BASE_PATH.'/'.$folder.'/'; // Путь от корня до нужного места
            $tv_name = 'photo'; // имя нашей тв
             
            // все значения файла
            $nameFile = $_FILES['photo']['name'];
            $typeFile = $_FILES['photo']['type'];
            $tmpNameFile = $_FILES['photo']['tmp_name'];
            $sizeFile = $_FILES['photo']['size']; 
             
            $limit_size = 3*1024*1024; // 3 Mb - максимальный размер загружаемого файла
            $file_types = array("jpeg", "jpg", "gif", "png"); // доступные расширения для загрузки
            $extensionFile = substr(strrchr($nameFile, '.'), 1); // получаем расширение файла
             
            $NewNameFile = 'id_'.$id.'_'.date("m_d_y").'.'.$extensionFile;  // наше новое имя файла
             
            if(is_uploaded_file($tmpNameFile)) // проверяем зашёл ли файл
            {
                if($limit_size > $sizeFile)
                { // Проверка на размер
                    if(in_array($extensionFile, $file_types)){ // проверка на тип
                         move_uploaded_file($tmpNameFile, $path.$NewNameFile); // загрузка файла
                         $resource->setTVValue($tv_name, $folder.'/'.$NewNameFile); // запись в ТВ
                    }
                }
            }
        }
    } 
}
Илья Уткин
12 июля 2016, 10:19
2
+1
Видео-уроков нет. А что значит «привязать к тв-полям»? ТВ-поля использовать вряд ли получится, но интерфейс можно переделать, отредактировав JS-файлы. Вот пара советов:
brioni
11 июля 2016, 18:42
1
+1
Загрузка изображений с фротэнда теперь реализована из коробки.
Вывод загруженного изо на странице такой:
<img src="[[pdoResources:default=`/path/заглушка.png`? &class=`TicketFile` &where=`{"parent":[[+id]]}`  &sortby=`createdon`  &sortdir=`ASC`  &limit=`1`  &tpl=`@INLINE [[+url]]`]]" >
или
<img src="[[pthumb? &input=`[[pdoResources:default=`[[*image]]`? &class=`TicketFile` &where=`{"parent":[[+id]]}`  &sortby=`createdon`  &sortdir=`ASC`  &limit=`1`  &tpl=`@INLINE [[+url]]`]]` &options=`w=79,h=54`]]">