Автоудаление старых объявлений

Вопросы и ответы по изменению функционала, смене дизайна, переносу сайта и т.п.

Модераторы: Xpycm, Koduc

Правила форума
ВНИМАНИЕ! Форум не является средством гарантированной поддержки клиентов и пользователей. Поэтому на быстрый ответ тут рассчитывать не нужно, как и на ответ вообще. Сотрудники отвечают по мере своих возможностей.

На форуме действует ограничение в 3 сообщения / сутки.
Если Вы хотите сказать "спасибо", то воспользуйтесь функцией "Повысить репутацию" - зелёная иконка "плюс" под ником ответившего.

Автоудаление старых объявлений

Сообщение Pavel555 » 27 май 2015, 11:05

Делаю автоудаление объявлений, опубликованных более N дней назад (доска только про продажу). Мысль такая: поставить в крон скрипт, который каждый день будет удалять необходимые записи из бд и файлы.

Подскажите, пожалуйста, как в бд и файлах правильно удалить объявление полностью, чтобы не осталось никаких его следов (картинок и прочего).

БД: во-первых, удалить запись из таблицы ore_apartment. Из каких-то еще таблиц удалять?
Файлы: какие пути?

Спасибо!
Pavel555
Прохожий
 
Сообщения: 36
Зарегистрирован: 13 апр 2014, 11:01
Очки репутации: 0

Re: Автоудаление старых объявлений

Сообщение Xpycm » 27 май 2015, 11:25

Модель Apartment, метод beforeDelete
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50

Re: Автоудаление старых объявлений

Сообщение Pavel555 » 27 май 2015, 13:52

А как его запустить из консоли сервера?
Pavel555
Прохожий
 
Сообщения: 36
Зарегистрирован: 13 апр 2014, 11:01
Очки репутации: 0

Re: Автоудаление старых объявлений

Сообщение Xpycm » 27 май 2015, 15:38

https://www.google.ru/search?q=использование+php+из+командной+строки
https://www.google.ru/search?q=как+запустить+скрипт+из+консоли

Зачем его запускать? Посмотрите что происходит в этом методе и сделайте также.
Либо, получаете объект модели Apartment через тотже findByPk и вызываете метод delete();

Документация по yii: http://www.yiiframework.com/, http://yiiframework.ru/
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50

Re: Автоудаление старых объявлений

Сообщение Pavel555 » 27 май 2015, 19:10

Вроде разобрался, спасибо! Единственно, для картинок там явно SQL запрос не указан, зато есть
Код: Выделить всё
Images::deleteDbByObjectId($this->id); 

это то же, что и
Код: Выделить всё
$sql = 'DELETE FROM {{images}} WHERE id_object="'.$this->id.'"';
        Yii::app()->db->createCommand($sql)->execute(); 

?
Pavel555
Прохожий
 
Сообщения: 36
Зарегистрирован: 13 апр 2014, 11:01
Очки репутации: 0

Re: Автоудаление старых объявлений

Сообщение Xpycm » 27 май 2015, 20:10

Не за что.

Да, вы правильно поняли. Это будет одно и то же
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50

Re: Автоудаление старых объявлений

Сообщение Xpycm » 27 май 2015, 20:16

Кстати, можете для этих целей немного переписать метод checkDateEndActivity в protected\components\BeginRequest.php

этот метод деактивирует объявления, у которых закончился срок размещения ( если при создании объявления было выбран "Срок активности объявления" не "всегда" )

Можно вместо:
Код: Выделить всё
public static function checkDateEndActivity () {
    
$adEndActivity Apartment::model()->with('user')->findAll('t.date_end_activity <= NOW() AND t.activity_always != 1 AND (t.active=:status OR t.owner_active=:status)', array(':status' => Apartment::STATUS_ACTIVE));
    foreach(
$adEndActivity as $ad){
        
$ad->scenario 'update_status';
        if(isset(
$ad->user) && $ad->user->role == User::ROLE_ADMIN){
            
$ad->active Apartment::STATUS_INACTIVE;
        } else {
            
$ad->active Apartment::STATUS_INACTIVE;
            
$ad->owner_active Apartment::STATUS_INACTIVE;
        }
        
$ad->save(false);
    }


написать:
Код: Выделить всё
public static function checkDateEndActivity () {
    
$adEndActivity Apartment::model()->with('user')->findAll('t.date_end_activity <= NOW() AND t.activity_always != 1 AND (t.active=:status OR t.owner_active=:status)', array(':status' => Apartment::STATUS_ACTIVE));
    foreach(
$adEndActivity as $ad){
        
$ad->delete();
    }
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50


Вернуться в Вопросы и помощь по изменениям

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 83

cron