Проба пера. Компонент "Карта сайта" для instantcms 1.7

Автор: HolyGun
Опубликовано: 421 день назад (29 марта 2011)
Рубрика: Компоненты
Редактировалось: 1 раз — 29 марта 2011
+36
Голосов: 36
Всем привет. Да, да, да! Вам не показалось. :)

Я ее таки начал делать. И уже есть вполне юзабельный вариант. Результат работы компонента таков, как я понимаю суть вопроса. Да и опыта написания компонентов и модулей пока у меня совсем мало. Я только начал разбираться с устройством ЦМСки.

Компонент в стадии начальной разработки, файл sitemap.xml создается в корне сайта каждый раз, как идет обращение к компоненту, также, в корне сайта, создается файл robots.txt. Пользователь видит лишь html-версию карты.

Посмотреть результат работы в виде юзабельной html странички можно тут: http://www.o-bike.ru/sitemap
Сам файл sitemap.xml, который генерит скрипт: http://www.o-bike.ru/sitemap.xml
Файл robots.txt, который генерит скрипт: http://www.o-bike.ru/robots.txt

Пока генератор карты сайта обрабатывает: Пользователей и их фотографии, Блоги, Форумы, Объявления, FAQ (т.е. те разделы сайта, которые у меня используются). Настроек в админке никаких нет.

В перспективе доработать до более серьезного, полноценного компонента с настройками.

Компонент бесплатный, и будет оставаться таким. Но тем не менее я буду рад Вашим добровольным пожертвованиям, которые будут стимулировать меня для дальнейшей работы над этим и другими проектами. В самом конце поста оставляю реквизиты для Вашей добровольной спонсорской поддержки.
Компонент гарантированно не содержит "пасхальных яиц", ненужных ссылок и прочих неприятных моментов.

Установка:
1. Качаем архив со скриптом http://www.o-bike.ru/files/com_sitemap_v.0.1a.zip
2. Распаковываем, и загружаем содержимое архива в корень директории ./components
3. В админке заходим в раздел Компоненты, жмем серую шестерню с зеленым плюсом и выбираем готовый для установки компонент "Карта сайта". Проверяем, чтобы он оказался в списке компонентов и был включен.
4.1. Затем переходим в раздел Меню. Жмем Создать пункт.
4.2. В поле Заголовок пункта меню, вводим название пункта, то как оно будет отображаться.
4.3. Выбираем Родительский пункт. Удобнее всего будет в корне меню.
4.4. Действие пункта меню. Тут выбираем Открыть компонент. Ниже выбираем компонент Карта сайта
4.5. Настраиваем публикацию и доступ к пункту, и жмем Сохранить пункт.
Скрины не делал. Думаю что сложностей с установкой не возникнет.

Возможные проблемы:
1. Не создаются файлы sitemap.xml и robots.txt. Возможно отсутсвуют права на запись в корень сайта. Проверка будет добавлена в следующих версиях.
2. Генерит "пустой" файл и на страничке пусто. Возможно отсутсвуют данные в БД или же структура БД отличается от дефолтной, либо у баз префикс отличный от дефолтного cms_. Решение с префиксом простое. В файле ./components/sitemap/frontend.php надо заменить в запросах префикс cms_ на Ваш.
3. Об остальных обнаруженных проблемах пишите тут. Будем разбираться вместе.

Ну вроде все. Следите за новостями.

Реквизиты для спонсорских пожертвований:
Webmoney WMID: 200447737040
Z219463200364
R359781226955
Модуль "Онлайн радио" v.2.5 | Доработаный и переделаный компонент "Карта сайта" для InstantCMS 1.7
Amurland # 29 марта 2011 в 03:54 0
Не увидил то, что генерируется http://www.o-bike.ru/sitemap
HolyGun # 29 марта 2011 в 03:55 0
В смысле не увидел?
Amurland # 29 марта 2011 в 04:03 0
ну там же что-то должно отображаться?
HolyGun # 29 марта 2011 в 04:08 +3
Да. Вот то что отображается у меня...
http://floomby.ru/content/dD7OlPfKk2/

Стоп! Кажется понял... )))
Код PHP:
	if (!$inUser->id) return false;
	if (!$inUser->is_admin) return false;
Защита "от посторнних" на время написания...
Сейчас поправлю и перезалью архив.
Извиняюсь. Ночь глубокая на дворе... Не досмотрел...
Amurland # 29 марта 2011 в 04:25 0
а я вот  уже проснулся и на работеsmileДальний восток
Amurland # 29 марта 2011 в 04:05 +1


ну а вообще плюснул ;)
Собираюсь поставить
HolyGun # 29 марта 2011 в 04:09 +3
Исправил.
fact # 29 марта 2011 в 04:19 +1
Спасибо тебе добрый человек! Баблосики мне в начале месяца поступят- обязательно магарыч на счёт закину!
lezginka.ru # 29 марта 2011 в 06:35 +1
однозначно плюс
до сих пор ни одной карты не было, а тут сразу 2
-----------
HolyGun , как думаешь, на больших сайтах(более 1000страниц) не зависнет ?
Виктор # 31 марта 2011 в 13:19 0
Не зависнет - не та система формирования списка.
Amurland # 29 марта 2011 в 09:03 0
Хотелось бы ещё по статьям сделать выборку... ;)

Поставил. Работаетsmileпасип
googlebot # 29 марта 2011 в 09:08 +6
+ только зачем роботс перезаписывать? У многих там свои правила...
Захар # 29 марта 2011 в 09:25 +1
+1 за компонент
-1 за невнимательность )))
Дружище, подход изначально неверный, ты же читал мой пост про такого рода карты. Нужно делать несколько модулей. Кто не знает о чем речь ознакомьтесь ТУТ
mrDON # 29 марта 2011 в 11:18 0
+ за новаторство.
Вопрос.
У меня более 5 тыс зарегистрированных пользователей, каждый вечер доходит до 30-40 человек онлайн, и они очень активно общаются, как будет обновляться сайтмап? не потушил ли он сервак своими обновлениями?)
lezginka.ru # 29 марта 2011 в 12:20 +1
Хотел бы обратить внимание разработчика, на замечание Захара
http://www.instantcms.ru/go/url=http://www.zuhernica.ru/zuheropotugi-html-php-css/kak-sdelat-kartu-saita-dlja-instantcms-karta-blogov.html
на это стоит обратить внимание, особенно про фильтры яндекса(опасная вещь)
fact # 29 марта 2011 в 12:22 +1
с тэгами нужно что-то делать, да и автоматическое создание роботс нужно убрать, действительно он у всех свой
HolyGun # 29 марта 2011 в 12:40 +5
Начал работу над новой версией. Постараюсь учесть все замечания и нюансы. Следующая версия будет радикально отличаться от этой. Скорых сроков не обещаю. В общем, скоро, дождитесь. :)
HolyGun # 29 марта 2011 в 12:45 +2
На счет нагрузок на сервер и создания robots.txt
Находим строки
Код PHP:
	file_put_contents("./sitemap.xml", $sitemap);
	file_put_contents("./robots.txt",robots_txt($host));
Удаляем строку
Код PHP:
	file_put_contents("./robots.txt",robots_txt($host));
запись в robots.txt отключена.

Меняем строку
Код PHP:
	file_put_contents("./sitemap.xml", $sitemap);
на этот код
Код PHP:
	if ($inUser->is_admin) {
		file_put_contents("./sitemap.xml", $sitemap);
	}
Файл sitemap.xml создается только если страничку с картой сайта посетит пользователь с правами админа. для остальных просто генерится html версия.
lezginka.ru # 29 марта 2011 в 12:50 +2
может добавить функцию - "роботс по желанию", если это не требует переделки
HolyGun # 29 марта 2011 в 12:53 +5
Уже думаю над этим :)
lezginka.ru # 29 марта 2011 в 13:16 +1
может это тоже пригодится
http://code.google.com/p/googlesitemapgenerator/downloads/list
Виктор # 31 марта 2011 в 14:42 0
Это совсем из другой оперы smile
Виктор # 31 марта 2011 в 14:41 +1
И кстати по robots.txt.
Во-первых, добавить проверку на существования robots.txt - если есть, то не трогать. Если нет, то естесственно создать, только доработать. Тут раньше была тема по содержимому robots.txt.
Во-вторых, не нужно в файле три раза писать sitemap=...
sitemaps.org:
Эта инструкция не зависит от строки агента пользователя, поэтому неважно, где она размещается в файле. При наличии файла индекса Sitemap можно включить местоположение только этого файла. Перечислять каждый отдельный файл Sitemap, указанный в файле индекса, не нужно.
HolyGun # 31 марта 2011 в 15:05 +3
Вот как раз в новой версии только что сделал эту проверку. Т.е. если robots.txt нет, то он создается.
Если есть, то админу показывается его файл, и шаблонный, в качестве рекомендации.
Да. Теперь для каждого раздела сайта генерится свой сайтмап, а потом собирается индекс.
Думаю. если все будет ровно, то до выходных доделаю.
Пока осталось добавить в обработку разделы: Статьи, Каталог, Фото, Новости, Клубы.
Виктор # 1 апреля 2011 в 10:59 0
Индекс - имеется ввиду индексный sitemap? там где указаны файлы с картами по разделам?
Я что-то упустил? Статьи и новости - это разные разделы(компоненты)?
HolyGun # 1 апреля 2011 в 12:28 0
Да. Индексный сайтмап.
Добрался до статей и новостей, и уже понял, что это не отдельные компоненты.
Опыт приходит со временем. Опыта работы с InstantCMS у меня и месяца не наберется :)
Но это дело поправимое... :)
del # 20 апреля 2011 в 23:26 0
Выявилась такая проблема на 1.8: sitemap.xml генерит, а файлы в /sitemaps/ не видит и не генерирует заново. Ну, то, что он их не видел, я решил просто прописав в конфиге полный путь к директории (с доменом). Теперь видит на странице /sitemap в служебной информации, однако, не генерирует эти файлы при входе на страницу, и последние статьи туда не попадают.
HolyGun # 20 апреля 2011 в 23:51 0
del # 21 апреля 2011 в 07:32 0
Странно, в прошлый раз я его и ставил, но после обновления он работать отказался) теперь работает, спасибо)
Единственное... в frontend.php нужно убрать "'.'." в строке:
Код PHP:
$output['filename']	= '.'.$config['sitemap_path'].$output['name'].'.xml';
иначе ставит точку после доменной зоны и яндекс ругается.
del # 21 апреля 2011 в 07:39 0
А, ну вот теперь понял... убираешь эту точку, и файлы перестают генерироваться... Тогда каким образом избавиться от точки после доменного имени?
Код PHP:
<loc>http://linux-easy.ru./sitemaps/content.xml</loc>
del # 21 апреля 2011 в 15:54 0
Разобрался, сделал так (в frontend.php):
Код PHP:
$output['filename']	= '.'.$config['sitemap_path'].$output['name'].'.xml';
$output['loc']		= $config['host'].$config['sitemap_path'].$output['name'].'.xml';