Як прибрати 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, і не чіпаємо їх.

Для надійності розуміння методики, викладемо кілька скріншотів.

  1. Заходимо в таблицю menu
  2. Натискаємо кнопку Пошук. Навпаки рядка title вибираємо LIKE%. %, В поле "значення" вписуємо virtue і, не забираючи курсор з поля, натискаємо ENTER. Отримуємо відфільтрований список менюшек Virtuemart. Тут всього 13 правильних, інші "биті".
  3. Переміщаємо нижній повзунок вправо (таблиця зсувається вліво), знаходимо поле parent_id і натискаємо по заголовку. Тим самим виконується запит на сортування у порядку зменшення. Дивимося угорі ліворуч, скільки записів всього нам повернув запит. Якщо записів більше ліміту відображення, то збільште ліміт, щоб на екран вивелися всі записи. Прокрутіть сторінку вниз-верх, перепишіть унікальні значення з шпальти parent_id. Або виконайте запит, зазначений вище.
  4. Перевіряємо айдішнікі на "битость". Натисніть кнопку Пошук. У першому рядку ID введіть перше значення з вашого списку і натисніть ENTER. Якщо "нічого не сталося", це не означає, що нічого не сталося. Прокрутіть сторінку вниз і подивіться на зелене повідомлення: MySQL повернула порожній результат (тобто нуль рядків). (Запит зайняв 0.0002 сек.) Це означає, що всі записи в таблиці menu з таким parent_id посилаються "в нікуди" і їх можна з радістю видалити. Для цього стираємо значення в поле ID і вводимо його ж в поле parent_id, натискаємо ENTER, бачимо список битих записів, відзначаємо всі прапорцями зліва і натискаємо внизу посилання "Видалити". Підтверджуємо ТАК наша дія.
  5. Таким же чином перевіряємо інші айдішнікі. Один з них обов'язково існує в базі. Саме цей запис є батьківської для 13 записів меню Virtuemart.

Будь ласка, робіть резервну копію таблиці перед чищенням.