Страница 1 из 1

Как ограничить кол-во фото?

СообщениеДобавлено: 26 мар 2014, 21:31
qwen1
Подскажите как ограничить количество фото загружаемых пользователем при самостоятельной подаче объявления? А то так можно и 2,3,4 гигабайта фоток нагрузить и сервер сдохнет... Не всегда получается вовремя проследить за этим. *SCRATCH*

Re: Как ограничить кол-во фото?

СообщениеДобавлено: 27 мар 2014, 08:30
Xpycm
protected\modules\images\controllers\MainController.php, метод actionUpload
после:
Код: Выделить всё
$model = $this->checkOwner($id); 

вставить:
Код: Выделить всё
$maxCountImages = 5; # максимальное количество загружаемых фотографий для объявления
        
$sql 
= 'SELECT COUNT(id) FROM {{images}} WHERE id_object = '.$model->id;
$currImgCount = Yii::app()->db->createCommand($sql)->queryScalar();

if ($currImgCount > $maxCountImages) {
    $result['error'] = Yii::t("module_places", "no_more_{num}_pictures", array("{num}" => $maxImgs));
    $result = htmlspecialchars(json_encode($result), ENT_NOQUOTES);
    echo $result;
    Yii::app()->end();
}
 


В панели администратора, секции "Переводы" добавить перевод для : "no_more_{num}_pictures" (Вы не можете загружать более {num} фотографий). Отсортируете по "не переведено" и увидите такую константу.

Не тестировал, но должно работать.

Re: Как ограничить кол-во фото?

СообщениеДобавлено: 27 мар 2014, 10:21
qwen1
Xpycm писал(а):protected\modules\images\controllers\MainController.php, метод actionUpload
после:
Код: Выделить всё
$model = $this->checkOwner($id); 

вставить:
Код: Выделить всё
$maxCountImages = 5; # максимальное количество загружаемых фотографий для объявления
        
$sql 
= 'SELECT COUNT(id) FROM {{images}} WHERE id_object = '.$model->id;
$currImgCount = Yii::app()->db->createCommand($sql)->queryScalar();

if ($currImgCount > $maxCountImages) {
    $result['error'] = Yii::t("module_places", "no_more_{num}_pictures", array("{num}" => $maxImgs));
    $result = htmlspecialchars(json_encode($result), ENT_NOQUOTES);
    echo $result;
    Yii::app()->end();
}
 
Спасибо конечно огромное, только я с переводами не понял, если можно подробнее чайнику объясните)

В панели администратора, секции "Переводы" добавить перевод для : "no_more_{num}_pictures" (Вы не можете загружать более {num} фотографий). Отсортируете по "не переведено" и увидите такую константу.

Не тестировал, но должно работать.

Re: Как ограничить кол-во фото?

СообщениеДобавлено: 27 мар 2014, 10:42
Xpycm
Непереведёная строка "no_more_{num}_pictures" будет здесь - http://сайт/translateMessage/backend/main/admin

Код: Выделить всё
Yii::t("module_places""no_more_{num}_pictures", array("{num}" => $maxImgs)); 

Подробнее про Yii:t - http://www.yiiframework.com/doc/guide/1 ... opics.i18n

Не хотите заморочиться и сделать "как нужно", то вместо:
Код: Выделить всё
$result['error'] = Yii::t("module_places""no_more_{num}_pictures", array("{num}" => $maxImgs)); 

пропишите сразу:
Код: Выделить всё
$result['error'] = 'Вы не можете загружать более '.$maxImgs.' фотографий'

Re: Как ограничить кол-во фото?

СообщениеДобавлено: 27 мар 2014, 10:58
qwen1
Xpycm писал(а):Непереведёная строка "no_more_{num}_pictures" будет здесь - http://сайт/translateMessage/backend/main/admin

Код: Выделить всё
Yii::t("module_places", "no_more_{num}_pictures", array("{num}" => $maxImgs)); 

Подробнее про Yii:t - http://www.yiiframework.com/doc/guide/1 ... opics.i18n

Не хотите заморочиться и сделать "как нужно", то вместо:
Код: Выделить всё
$result['error'] = Yii::t("module_places", "no_more_{num}_pictures", array("{num}" => $maxImgs)); 

пропишите сразу:
Код: Выделить всё
$result['error'] = 'Вы не можете загружать более '.$maxImgs.' фотографий'; 

код я прописал, но в переводах не появилась не переведенная строка

Re: Как ограничить кол-во фото?

СообщениеДобавлено: 27 мар 2014, 11:32
Xpycm
Она появится после того, как будет достигнут лимит на количество фотографий.

Re: Как ограничить кол-во фото?

СообщениеДобавлено: 10 июн 2014, 22:30
maxeg
тогда нужно прописать так

Код: Выделить всё
$maxCountImages = 5; # максимальное количество загружаемых фотографий для объявления
        
        $sql 
= 'SELECT COUNT(id) FROM {{images}} WHERE id_object = '.$model->id;
        $currImgCount = Yii::app()->db->createCommand($sql)->queryScalar();

        if ($currImgCount >= $maxCountImages) {
            $result['error'] = 'Вы не можете загружать более '.$maxCountImages.' фото'; 
            $result 
= htmlspecialchars(json_encode($result), ENT_NOQUOTES);
            echo $result;
            Yii::app()->end();
        } 


и в файле \protected\modules\images\views\widgetAdminImages.php
вместо
Код: Выделить всё
'multiple' => true, 

прописать
Код: Выделить всё
'multiple' => false, 

Иначе можно будет выбрать сразу более 5 файлов при мультизагрузке

Чтобы ограничить мультизагрузку можно покопать http://yiiframework.ru/forum/viewtopic.php?f=3&t=14236