Як прибрати com_virtuemart_ з url сторінки virtuemart
Так ось, при створенні нового пункту меню після поновлення Virtuemart ядро Joomla може "випадково" підхопити одну з "битих записів" і записати в поле PATH суму рядків з поля alias і з поля title. Таким чином у нового пункту меню в поле path з'являється запис виду moyalias / com_virtuemart_menu_paymentmethod
Ми не стали розбиратися, як і чому це відбувається, але це факт.
Знайти і знищити
Власне, як лікувати, щоб не нашкодити. Ми просто видалили паразитні записи з заголовками COM_VIRUEMART з таблиці menu. Ідентифікувати паразитів дуже просто: у цих записів в поле parent_id вказано значення неіснуючої записи.
Увага! Перший запис Menu_Item_Root в таблиці menu з ID = 1 і parent_id = 0. Це "коренева" запис і видаляти її не можна. Всі інші записи повинні мати значення parent_id більше нуля.
Хто працює з таблицями MySQL, без праці відфільтрує всі записи по полю title з параметром% virtue%. потім випише з шпальти parent_id унікальні значення і перевірить, чи є в таблиці запис з таким ID. Якщо таких записів не знайдеться, можна сміливо видалити всі паразитки. У підсумку повинно залишитися 13 записів для фільтра% virtue% в поле title. Для отримання унікальних значень parent_id використовуйте запит в "швидкій правці", не забудьте поміняти префікс jos_ на ваш:
SELECT `parent_id` FROM` jos_menu` WHERE `title` LIKE '% VIRTUE%' GROUP BY` jos_menu`.`parent_id`
Чи не звертаємо уваги на рядки з ID = 1, і не чіпаємо їх.
Для надійності розуміння методики, викладемо кілька скріншотів.
- Заходимо в таблицю menu
- Натискаємо кнопку Пошук. Навпаки рядка title вибираємо LIKE%. %, В поле "значення" вписуємо virtue і, не забираючи курсор з поля, натискаємо ENTER. Отримуємо відфільтрований список менюшек Virtuemart. Тут всього 13 правильних, інші "биті".
- Переміщаємо нижній повзунок вправо (таблиця зсувається вліво), знаходимо поле parent_id і натискаємо по заголовку. Тим самим виконується запит на сортування у порядку зменшення. Дивимося угорі ліворуч, скільки записів всього нам повернув запит. Якщо записів більше ліміту відображення, то збільште ліміт, щоб на екран вивелися всі записи. Прокрутіть сторінку вниз-верх, перепишіть унікальні значення з шпальти parent_id. Або виконайте запит, зазначений вище.
- Перевіряємо айдішнікі на "битость". Натисніть кнопку Пошук. У першому рядку ID введіть перше значення з вашого списку і натисніть ENTER. Якщо "нічого не сталося", це не означає, що нічого не сталося. Прокрутіть сторінку вниз і подивіться на зелене повідомлення: MySQL повернула порожній результат (тобто нуль рядків). (Запит зайняв 0.0002 сек.) Це означає, що всі записи в таблиці menu з таким parent_id посилаються "в нікуди" і їх можна з радістю видалити. Для цього стираємо значення в поле ID і вводимо його ж в поле parent_id, натискаємо ENTER, бачимо список битих записів, відзначаємо всі прапорцями зліва і натискаємо внизу посилання "Видалити". Підтверджуємо ТАК наша дія.
- Таким же чином перевіряємо інші айдішнікі. Один з них обов'язково існує в базі. Саме цей запис є батьківської для 13 записів меню Virtuemart.
Будь ласка, робіть резервну копію таблиці перед чищенням.