20.06.2017 05:43:58 pm
Модуль Pages предназначен для создания отдельных страниц, что то типа "группы". Каждая созданная страница имеет свой форум, блог, раздел фотографий, раздел событий и видео архив.
Если потребуется удалить страницу, то после удаления останутся записи, что принадлежали страницы: темы форума, блоги, события и так далее. Я решил написать функцию, которая будет удалять все это вместе со страницей. Моя функция по удаляет только темы форума, но скоро мои руки будут посвободнее и я допишу функции до конца.
И так. Открываем: module/pages/include/service/process.class.php, находим функцию delete:
В этой функции, перед:
Добавляем:
После функции delete добавляем новую функцию:
Готово.
Обратите внимание на то, что название моих переменных может отличаться от ваших.
Для удаление статей блогов удаляемой страницы: перед комментарием:
Добавляем следующий код:
Для удаления музыки, что принадлежит удаляемой страницы, после:
Добавляем:
Для удаления видео вставляем код:
Для удаления событий:
Фотографии, что были загружены от имени страницы, удаляются вместе со страницей, а те, что загружены от имени пользователя остаются.
Если надо, чтобы удалялись все фотографии, то добавьте в функцию deleteOther следующий код:
Код всей функции deleteOther, у меня получился таким:
Если потребуется удалить страницу, то после удаления останутся записи, что принадлежали страницы: темы форума, блоги, события и так далее. Я решил написать функцию, которая будет удалять все это вместе со страницей. Моя функция по удаляет только темы форума, но скоро мои руки будут посвободнее и я допишу функции до конца.
И так. Открываем: module/pages/include/service/process.class.php, находим функцию delete:
public function delete($id, $callback = true)
{
...
}
В этой функции, перед:
return true;
}
Добавляем:
$this->deleteOther($page['page_id']);
После функции delete добавляем новую функцию:
# Удаление всех записей связанных с удаляемой страницей
private function deleteOther($id)
{
# Удаление тем форума
$threads = $this->database()
->select('thread_id')
->from(Phpfox::getT('forum_thread'))
->where('group_id = ' . $id)
->execute('getSlaveRows');
if (!empty($threads))
{
$process = Phpfox::getService('forum.thread.process');
foreach ($threads as $thread)
{
$process->delete($thread['thread_id']);
}
}
# Удаление тем форума END
} # Удаление всех записей связанных с удаляемой страницей END
Готово.
Обратите внимание на то, что название моих переменных может отличаться от ваших.
Для удаление статей блогов удаляемой страницы: перед комментарием:
# Удаление тем форума
Добавляем следующий код:
# Удаление статей блога
$blogs = $this->database()
->select('blog_id')
->from(Phpfox::getT('blog'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($blogs))
{
$process = Phpfox::getService('blog.process');
foreach ($blogs as $blog)
{
$process->delete($blog['blog_id']);
}
}
# Удаление статей блога END
Для удаления музыки, что принадлежит удаляемой страницы, после:
# Удаление тем форума END
Добавляем:
# Удаление музыки
$songs = $this->database()
->select('song_id')
->from(Phpfox::getT('music_song'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($songs))
{
$process = Phpfox::getService('music.process');
foreach ($songs as $song)
{
$process->delete($song['song_id']);
}
}
# Удаление музыки END
Для удаления видео вставляем код:
# Удаление видео
$videos = $this->database()
->select('video_id')
->from(Phpfox::getT('video'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($videos))
{
$process = Phpfox::getService('video.process');
foreach ($videos as $video)
{
$process->delete($video['video_id']);
}
}
# Удаление видео END
Для удаления событий:
# Удаление событий
$events = $this->database()
->select('event_id')
->from(Phpfox::getT('event'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($events))
{
$process = Phpfox::getService('event.process');
foreach ($events as $event)
{
$process->delete($event['event_id']);
}
}
# Удаление событий END
Фотографии, что были загружены от имени страницы, удаляются вместе со страницей, а те, что загружены от имени пользователя остаются.
Если надо, чтобы удалялись все фотографии, то добавьте в функцию deleteOther следующий код:
# Удаление фото
$photos = $this->database()
->select('photo_id')
->from(Phpfox::getT('photo'))
->where('module_id = \'pages\' AND group_id = ' . $id . ' AND user_id NOT IN (\'' . $id . '\')')
->execute('getSlaveRows');
if (!empty($photos))
{
$process = Phpfox::getService('photo.process');
foreach ($photos as $photo)
{
$process->delete($photo['photo_id']);
}
}
# Удаление фото END
Код всей функции deleteOther, у меня получился таким:
# Удаление всех записей связанных с удаляемой страницей
private function deleteOther($id)
{
# Удаление статей блога
$blogs = $this->database()
->select('blog_id')
->from(Phpfox::getT('blog'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($blogs))
{
$process = Phpfox::getService('blog.process');
foreach ($blogs as $blog)
{
$process->delete($blog['blog_id']);
}
}
# Удаление статей блога END
# Удаление событий
$events = $this->database()
->select('event_id')
->from(Phpfox::getT('event'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($events))
{
$process = Phpfox::getService('event.process');
foreach ($events as $event)
{
$process->delete($event['event_id']);
}
}
# Удаление событий END
# Удаление тем форума
$threads = $this->database()
->select('thread_id')
->from(Phpfox::getT('forum_thread'))
->where('group_id = ' . $id)
->execute('getSlaveRows');
if (!empty($threads))
{
$forum = Phpfox::getService('forum.thread.process');
foreach ($threads as $thread)
{
$forum->delete($thread['thread_id']);
}
}
# Удаление тем форума END
# Удаление музыки
$songs = $this->database()
->select('song_id')
->from(Phpfox::getT('music_song'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($songs))
{
$process = Phpfox::getService('music.process');
foreach ($songs as $song)
{
$process->delete($song['song_id']);
}
}
# Удаление музыки END
# Удаление фото
$photos = $this->database()
->select('photo_id')
->from(Phpfox::getT('photo'))
->where('module_id = \'pages\' AND group_id = ' . $id . ' AND user_id NOT IN (\'' . $id . '\')')
->execute('getSlaveRows');
if (!empty($photos))
{
$process = Phpfox::getService('photo.process');
foreach ($photos as $photo)
{
$process->delete($photo['photo_id']);
}
}
# Удаление фото END
# Удаление видео
$videos = $this->database()
->select('video_id')
->from(Phpfox::getT('video'))
->where('module_id = \'pages\' AND item_id = ' . $id)
->execute('getSlaveRows');
if (!empty($videos))
{
$process = Phpfox::getService('video.process');
foreach ($videos as $video)
{
$process->delete($video['video_id']);
}
}
# Удаление видео END
} # Удаление всех записей связанных с удаляемой страницей END
- Жалоба