Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 1016 Просмотров
*

tom_jdev

  • Новичок
  • 3
  • 0 / 0
Добрый день. Есть сайт, который работает с 2012 года, на котором скопилось очень много материалов. Возникла необходимость удалить материалы, которые опубликованы, но при этом сами не привязаны к меню или входят в категорию, которая не привязана к меню. Т.е. материалы существуют, опубликованы, ищутся поиском, но при этом нет страницы, к которой они привязаны. К сожалению те, кто сопровождал сайт ранее, не озадачились удалением материалов, когда в них пропадала необходимость.
Ну и собственно вопрос: как можно удалить такие материалы?
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Простыми методами - никак, пожалуй.
Тут надо придумать и написать скриптик чтоб их нашел и удалил
*

tom_jdev

  • Новичок
  • 3
  • 0 / 0
Простыми методами - никак, пожалуй.
Тут надо придумать и написать скриптик чтоб их нашел и удалил
Например, можно искать их запросами к БД, но тогда вопрос, по какому принципу?
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Например, можно искать их запросами к БД, но тогда вопрос, по какому принципу?

Да сложно там - строить дерево меню, с категориями и материалами и проходиться по каждому материалу, проверяя, есть ли оно в дереве
*

SeBun

  • BanMaster
  • 4018
  • 259 / 5
  • @SeBun48
В таблице #__categories находятся категории. Их там не так много обычно, вы можете легко получить ID тех категорий, которые у вас отключены. В таблице #__content находятся материалы. Вы можете их выбрать по значению столбца catid. Например, такой запрос:
Код
SELECT * FROM prefix_content where catid=1 OR catid=2 OR catid=3 

Такой запрос выдаст вам все материалы, относящиеся к конкретным категориям. Вы можете так же одним запросом снять их все с публикации. Удалять таким образом крайне не рекомендую, т.к. на материалы завязана еще одна таблица, #__assets, есть и другие связи. Так что я показываю лишь способ снятия с публикации. Например, такой запрос:

Код
UPDATE prefix_content SET state=0 where catid=1 OR catid=2 OR catid=3 

Примерно то же самое и с меню. Можно сделать выборку по материалам. Если пункт меню у вас ведет на конкретный материал, можно сделать составной запрос и выбрать материалы, на которые не ведет ни один пункт меню плюс дополнительные условия, например дату публикации, что бы не снять с публикации нужные материалы. Здесь, как сказал @voland, лучше всего написать скрипт, который будет решать такую задачу. И выполнить его в виде маленького компонента, что бы работать из админки самой Joomla. Ибо лезть с запросами в базу без четкого понимания, что делаешь - это плохая практика.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

tom_jdev

  • Новичок
  • 3
  • 0 / 0
В таблице #__categories находятся категории. Их там не так много обычно, вы можете легко получить ID тех категорий, которые у вас отключены.
Категорий достаточно много (130+)
Здесь, как сказал @voland, лучше всего написать скрипт, который будет решать такую задачу. И выполнить его в виде маленького компонента, что бы работать из админки самой Joomla. Ибо лезть с запросами в базу без четкого понимания, что делаешь - это плохая практика.
Скорее всего напишу скрипт, а пока решил задачу(получения списка материалов) таким образом:

Код
SELECT #__content.id, #__content.title, #__content.alias, #__content.catid FROM #__content
LEFT JOIN #__menu ON #__menu.link = concat('index.php?option=com_content&view=article&id=', #__content.id)
WHERE #__menu.id is NULL AND #__content.catid IN (
SELECT #__categories.id FROM #__categories
LEFT JOIN #__menu ON #__menu.link = concat('index.php?option=com_content&view=category&id=', #__categories.id)
WHERE #__menu.id is NULL
)
AND #__content.state = 1
Спасибо, @voland, @SeBun
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться