Скрипт автоматически создаваемая карта xml
Как автоматически создавать карту xml? Я уже давно не думаю о создании карты сайта xml формата! Потому, что она у меня генерируется автоматически! На самом деле - автоматическая карта xml - это не такой уж сложный скрипт.
Подробно о автоматически создаваемой xml sitemap в php
- Алгоритм создания автогенерации sitemap на php
- Массив всех ссылок сайта для карты xml из базы данных
- Массив всех ссылок сайта для карты xml из файла
- Шапка и первая строка в карте xml
- Цикл для формирования карты xml Запись данных в карту xml
- Код скрипта автоматического создания карты xml
- Проверка и запись в файл карты xml - вариант №2 Скачать вариант №2.
Автоматическое обновление карты сайта xml.
Алгоритм создания автогенерации sitemap на php
Прежде чем приступать к скрипту автогенерации sitemap на php нам нужен алгоритм, т.е. как данный скрипт должен работать!
Мы должны хотя бы немного представлять. Но поскольку я знаю, как это работает, то напишу весь алгоритм!
Первая часть sitemap xml не повторяется, поэтому её надо написать вручную. Я в начало всегда вставляю домен сайта "https://dwweb.ru/", чтобы не ломать голову! Помещаем эти данные в переменную, пусть это будет "$data"
Самое важное и самое главное! Вы должны, каким-то образом получить все ссылки в массив. Далее в двух пунктах рассказано, как примерно должен собираться такой массив. Если у вас база данных либо, если у вас сайт на файлах.
После того, как вы собрали в массив все ссылки вашего сайта, сделать основное тело проще простого! Запускаем цикл, в котором оборачиваем ваши ссылки в теги xml. Полученное тело также помещаем в переменную "$data"
И последним пунктом - добавляем "urlset" - закрываем созданные данные из всех предыдущих пунктов. Это тоже добавляем нашей переменной "$data".
После того, как вся ваша "sitemap xml" внутри переменной, её записываем с помощью функции file_put_contents. Это всё!
Это - как должен работать генератор карты xml.
Если вы понятия не имеете, как создать массив о котором было сказано выше, то ниже примерно показано, как этот процесс должен происходить!
В итоге у вас должен получиться массив, который помещаем в переменную
Чтобы показать пример массива, то мы обрежем(весь массив огромен) массив с помощью array_splice до трех ячеек. И выведем с помощью 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
)
Массив всех ссылок сайта для карты 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 .= '
<url>
<loc>'.$array_Url[$i].'</loc>
<lastmod>'.date('Y').'-'.date('m').'-'.date('d').'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>';
}
После того, как мы создали основное тело "карты xml", закрываем последний тег "urlset"
$data .= '</urlset>';
Запись данных в карту xml
Далее нам понадобится функция file_put_contents - запишем в файл xml подготовленные данные!
if($_POST['submit'])
{
$write_for_main = file_put_contents($_SERVER['DOCUMENT_ROOT'].'/sitemap.xml' , $data);
}
Автоматическое обновление карты сайта xml.
По какому-то условию данная карта будет перезаписываться! У меня sitemap xml - автоматически обновляется после создания новой страницы:
Код скрипта автоматического создания карты xml
Соберем весь код генератора карты сайта xml в один код...
$domen = $_SERVER["HTTP_X_FORWARDED_PROTO"].'://'.$_SERVER["HTTP_HOST"];
$data = '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>'.$domen.'</loc>
<lastmod>'.date('Y').'-'.date('m').'-'.date('d').'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>';
for ($i=0; $i < count($array_Url) ; $i++)
{
$data .= '
<url>
<loc>'.$array_Url[$i].'</loc>
<lastmod>'.date('Y').'-'.date('m').'-'.date('d').'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>';
}
$data .= '</urlset>';
if($_POST['submit'])
{
$write_for_main = file_put_contents($_SERVER['DOCUMENT_ROOT'].'/sitemap.xml' , $data);
}
Проверка и запись в файл карты 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":
После фильтрации вернет :
Если адреса страниц не имеют перечисленных расширений, то адреса могут попадать с различным мусором из адресной строки.... нужно прописывать дополнительные фильтры.