Скрипт автоматически создаваемая карта xml
Как автоматически создавать карту xml? Я уже давно не думаю о создании карты сайта xml формата! Потому, что она у меня генерируется автоматически! На самом деле - автоматическая карта xml - это не такой уж сложный скрипт.
Подробно о автоматически создаваемой xml sitemap в php
- История/виды sitemap xml
- Алгоритм создания автогенерации sitemap на php
- Массив всех ссылок сайта для карты xml из базы данных
- Массив всех ссылок сайта для карты xml из файла
- Шапка и первая строка в карте xml
- Цикл для формирования карты xml Запись данных в карту xml
- Код скрипта
скачать автоматического создания карты xml - Проверка и запись в файл карты xml - вариант №2 Скачать вариант №2.
Автоматическое обновление карты сайта xml.
История/виды sitemap xml.
В первом пункте разберем "историю" xml карт и заодно - эта тема будет темой "видов xml карт".
Я занимаюсь сайтами уже так давно, что некоторые люди столько не живут! И первая моя "xml" карта, для первого моего сайта, была сделана вручную.
Когда ты делаешь 1 страницу в неделю или около того, то спокойно можно добавлять в карту ваши ссылки вручную и кроме того, в то время, для тех сайтов, можно было делать только таким способом!
После того, как меня это всё притомило, и количество сайтов и количество создаваемых страниц возросло, то я начал думать,что пора использовать какой-то способ, чтобы не делать это вручную!
Идея и способ -
Программа проходит по вашему сайту и собирает все ссылки, которые есть...
Туда попадают и те, которые уже выдают 404.
И туда не попадают некоторые ссылки, которые он не смог найти, либо не дошел.
Постоянно требуется сервис, который вновь создаст вашу обновленную карту "XML" с новыми ссылками.
Создай карту...
Скачай на комп...
Открой программу по ftp...
Загрузи на сайт...
К тому времени, когда я купил свой первый сайт на платном хостинге, кстати рекомендую : RUWEB, я уже имел некоторое представление о php.
Этот способ не используется на этом сайте, но на marrex.ru он используется до сих пор!
В момент создания/удаления страницы, "отдельный php скрипт" в цикле php проходит по базе и создает xml карту, этот способ описан ниже.
И записывает(file_put_contents) созданную карту "xml" в файл, например : https://marrex.ru/sitemap.xml.
Поскольку, количество виртуальных страниц превысило все разумные приделы и создание физических(в файле) "sitemap.xml" стало занимать непомерное количество места, то пришлось разработать скрипт, который выводит все существующие страницы "на лету".
Алгоритм создания автогенерации sitemap на php
Прежде чем приступать к скрипту автогенерации sitemap на php нам нужен алгоритм, т.е. как данный скрипт должен работать!
Мы должны хотя бы немного представлять. Но поскольку я знаю, как это работает, то напишу весь алгоритм!
Первая часть sitemap xml не повторяется, поэтому её надо написать вручную. Я в начало всегда вставляю домен сайта "https://dwweb.ru/", чтобы не ломать голову! Помещаем эти данные в переменную, пусть это будет "$data"
Самое важное и самое главное! Вы должны, каким-то образом получить все ссылки в массив. Далее в двух пунктах рассказано, как примерно должен собираться такой массив. Если у вас база данных либо, если у вас сайт на файлах.
После того, как вы собрали в массив все ссылки вашего сайта, сделать основное тело проще простого! Запускаем цикл, в котором оборачиваем ваши ссылки в теги xml. Полученное тело также помещаем в переменную "$data"
И последним пунктом - добавляем "urlset" - закрываем созданные данные из всех предыдущих пунктов. Это тоже добавляем нашей переменной "$data".
После того, как вся ваша "sitemap xml" внутри переменной, её записываем с помощью функции file_put_contents. Это всё!
Это - как должен работать генератор карты xml.
Если вы понятия не имеете, как создать массив о котором было сказано выше, то ниже примерно показано, как этот процесс должен происходить!
В итоге у вас должен получиться массив, который помещаем в переменную
Чтобы показать пример массива, то мы обрежем(весь массив огромен) массив с помощью array_splice или array_slice до трех ячеек. И выведем с помощью print_r
Пример вывод массива для xml карты
Array
(
[0] => https://dwweb.ru/page/php/dinamicheskoe_chislo.html
[1] => https://dwweb.ru/page/js/dw_hide_show.html
[2] => https://dwweb.ru/page/js/atribut_data.html
)
Ранее, здесь была ссылка на https://dwweb.ru/sitemap.xml, но с 2024 года, данный способ на данном сайте не используется, но этот способ всё еще используется вот здесь : https://marrex.ru/sitemap.xml!
На сайте "dwweb.ru" используется виртуальный/живой вывод sitemap.xml.
Массив всех ссылок сайта для карты xml из базы данных
В переменную
До начала цикла, перед строкой
Пишем такую запись:
От слов
У вас должно получиться примерно так:
$sdd_db_host="localhost";
$sdd_db_name="НАЗВАНИЕ-БАЗЫ-ДАННЫХ";
$sdd_db_user="ПОЛЬЗОВАТЕЛЬ";
$sdd_db_pass="ПАРОЛЬ";
@mysql_connect($sdd_db_host,$sdd_db_user,$sdd_db_pass);
@mysql_select_db($sdd_db_name);
$result=mysql_query("SELECT * FROM `НАЗВАНИЕ ТАБЛИЦЫ`");
while ($row=mysql_fetch_array($result))
{
}
mysql_close();
Какой в итоге долен получиться массив с ссылками!? Такой как данный пример.
Массив всех ссылок сайта для карты xml из файла
Далее... в принципе не особенно важно, как и на чем сделан ваш сайт, но в итоге вам нужно получить/создать любым способом массив ссылок, который вам нужно скормить скрипту по созданию файл "xml".
Пример массива для для карты xml.
Если сейчас я выведу существующий пример массива для "strong" с помощью print_r:
То мы получим вот такой результат:
Array
(
[0] => https://dwweb.ru/page/php/dinamicheskoe_chislo.html
[1] => https://dwweb.ru/page/js/dw_hide_show.html
[2] => https://dwweb.ru/page/js/atribut_data.html
)
Шапка и первая строка в карте xml
Две вещи в карте xml не повторяются - это шапка и "urlset", поэтому, шапку надо написать вручную и поместить в переменную "$data":
$data = '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
В переменную $domen - получим ваш домен.
В
В
$domen = $_SERVER["HTTP_X_FORWARDED_PROTO"].'://'.$_SERVER["HTTP_HOST"];
$data .= '<url>
<loc>'.$domen.'</loc>
<lastmod>'.date('Y').'-'.date('m').'-'.date('d').'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>';
Цикл для формирования основного тела карты xml
После того, как у нас готова шапка "карты xml" нам нужно создать основное тело "карты xml".
В пунктах
Далее в цикле for пропустим получившийся массив, обернем наши ссылки, как это мы сделали с доменом.
И поместим полученные данные в переменную "$data" :
Собираем основное тело "карты xml"
for ($i=0; $i < count($array_Url) ; $i++)
{
$data .= 'здесь в цикле создаем xml карту';
}
После того, как мы создали основное тело "карты xml", закрываем последний тег "urlset"
$data .= '</urlset>';
Запись данных в карту xml
Далее нам понадобится функция file_put_contents - запишем в файл xml подготовленные данные!
if($_POST['submit'])
{
записываем ранее полученные данные переменной "$data" в файл...
}
Автоматическое обновление карты сайта xml.
По какому-то условию данная карта будет перезаписываться! У меня sitemap xml - автоматически обновляется после создания новой страницы:
Код скрипта автоматического создания карты xml
Соберем весь код генератора карты сайта xml в один код... как данный код работает?
В архиве выше приведенный схематично код создания/обновление карты сайта xml php.
В переменную "$array_Url" нужно поместить массив ссылок.
Вот здесь рассказывал как сделать такой массив.
Помещаем данный код после записи о новой странице в базу данных.
Данные из базы нужно получить заново иначе... данные о новой созданной странице не попадут в карту "xml".
Данные в "xml карту будут записаны" по адресу:
Используем file_put_contents :
@file_put_contents($_SERVER['DOCUMENT_ROOT'].'/sitemap.xml' , $data);
Собаку используем в том случае, если файла по этому адресу не существует.
Если файла не существует и не поставить
Далее скрипт "автоматического обновления карты сайта xml" сделает все самостоятельно!
В коде указан "
Скачать код скрипта автоматического создания карты xml
Скачиваем код скрипта автоматического создания карты xml - здесь.
Проверка и запись в файл карты xml - вариант №2
Для одного из проектов делал автоматически обновляемую карту сайта xml. Почему-то я про неё совсем забыл!
А в архиве она есть.Принцип работы "запись в файл карты xml - вариант №2".
При открытии страницы, скрипт проверяет, есть ли данная страница в файле xml, если нет, то записывает адрес данной страницы в конец файла.
Логика проверки, обновления, записи в карту xml
Данный скрипт устанавливаем на все страницы сайта, если у вас единая точка входа, то вы знаете, как это сделать.
Копируем весь код от знаков <? до знаков ?> и вставляем в ваш сайт, о двух параметрах, на которые нужно обратить внимание чуть ниже.
Вы, или кто-то зайдет на вашу новую страницу - скрипт проверит, есть ли данная страница в файле "XML" - если нет, то добавит эту страницу в конец файла.
Если страница уже внутри файла "XML", то скрипт ничего не будет делать.
Для отладки скрипта - лучше потренироваться где-то на отдельном файле xml. Чтобы не потерять главную карту xml.
1). Путь до файла xml
Строка № 19, меняем путь до вашего файла xml.
Если карта находится в корневой папке, т.е. у неё адрес как у меня "https://dwweb.ru/sitemap.xml", то строка №19 должна иметь вид:
Строки 10,11 - фильтрация по расширению :
$del = '.html';
$del_2 = '.php';
Адрес страницы из адресной строки браузера будет обрезаться по двум параметрам, потом обратно собираться, чтобы после расширения не собирать мусор. в виде, например get.
Если, например, в строке окажутся повторение расширения ".html":
После фильтрации вернет :
Если адреса страниц не имеют перечисленных расширений, то адреса могут попадать с различным мусором из адресной строки.... нужно прописывать дополнительные фильтры.
Свои комменты в ожидании переделки!
Когда сделаю не знаю!
Времени нет...
Иначе сообщение будет удалено, вас в бан - все просто!
Но если, сил нет как хочется высказать всё, что вы думаете об этом, пожалуйста - комменты от Vk - форма ниже: