Продовжуючи тему парсеров. Одна з найпоширеніших завдань, які я постійно зустрічаю - заповнити Joomla сайт на основі іншого сайту. Повний переїзд, зазвичай з більш старої версії Joomla, але можливо і з іншого CMS, не важливо.
Зазвичай, простіше в ручну скопіювати всі тексти з сайту, ніж писати окремий граббер під цю справу. Коли ж справа стосується кількох сотень статей, мій внутрішній прагматик забороняє мені працювати руками і в справу вступає мозок.
В ідеалі парсер повинен з'їдати лише одну сторінку сайту на вході і обходити всі знайдені сторінки сам. У статті Як написати універсальний парсер сайтів за 1 годину я вже розповідав, як це зробити. Коли справа стосується переїзду на Joomla, то необхідно точно відтворити структуру сайту донора, тому трохи спростимо задачу, і будемо аналізувати довільні лише заданий список посилань, який буде певним чином прив'язаний до конкретного розділу з сайту джерела. А цей самий розділ на нашому сайті, створимо руками.
Писати будемо на php. Для початку нам потрібно функція парсер, яка буде завантажувати сторінку сайту.
Тут нічого нового:
Далі, нам потрібно створити стандартний матеріал Joomla
Це копіпаст коду з інтернету. Як бачите якщо є помилка, вона ніяк не обробляється, а просто виводиться на екран. Якщо хочете, обробіть помилки самі.
Функція повертає ідентифікатор створеного матеріалу. Він буде потрібно нам у такій функції.
І остання функція, яка нам буде потрібно - це функція створення елемента пункту меню:
Це теж, практично, копіпаст з інтернетів.
Розберемо, що ж тут відбувається. Сам файл скрипта підключає стандартну точку входу Joomla, і навіть инициализирует новий додаток. Після цього ви можете використовувати всі методи і класи Joomla, також як би ви це робили в компонентах або плагінах.
Далі по циклу, перебираємо масив $ links і отримуємо вміст заданої посилання, за допомогою функції get. Далі йде незрозумілий шматок коду. Він специфічний для даного сайту, але буде іншим для вас. Назва статті я беру просто з тега title. У більшості сайтів, в цьому тезі буде всяке сміття - назва статті - назва сайту - ключові слова. Тому цей момент вам треба обробити самостійно.
Основний контент сайту, був укладений в тег article і на 29-му рядку, я його звідти вилучаю.
Можливо Ваш сайт донор, виявиться більш складним і я б порекоменлдовал розбирати такі дані за допомогою бібліотеки SimpleHTMLDom