Скрипт Яндекс.Острова для DLE

Автор
Опубликовано: 2482 дня назад (2013-08-11)
Рубрика: Скрипты
Редактировалось: 13 раз — последний 2013-08-11
0
Голосов: 0
В общем сидел тут и от нечего делать решил попробовать все таки разобраться с Яндекс Островами которые так рекламит Яндекс. Хоть и веры пока не сильно много в то что эта тема будет сильно востребована, скорее всего будет использована для ресурсов которые строго каталогизированы - такие как авто каталоги, недвижимость, билетирование - думаю это были их основные цели, т.к. сами знаете что Яндекс подминает под себя самые интересные темы в виду субсервисов, тем не менее думаю есть шанс попробовать использовать данную технологию также в софт каталогах и других каталогах - может фильмов, файлов, книг ....
Именно эта мысль подтолкнула меня на пробу пера, в общем разбираемся, есть у меня каталог драйверов КучаДров.ру на котором и решил испытать данный сервис - там есть структурированный каталог на три уровня вложенности - который строго структурирован по принципу - тип устройства -> производитель -> серия устройства -> ну и далее самой устройство к которому выложен файл драйвера.

прежде всего в файлы /engine/classes/mysql.class.php и /engine/classes/mysqli.class.php вставляем функцию
после закрытия скобки функции function connect{ } примерно 67 строчка

Код PHP:
  1. function get_sub($id=0)
  2. {
  3. $sql = "SELECT * FROM dle_category WHERE parentid = ".(int)$id." ORDER BY posi ASC";
  4. $rs = $this->query($sql);
  5. while($row=mysql_fetch_assoc($rs) )
  6. { $cat[]=$row;
  7. }
  8. if(!is_array($cat)) return 0;
  9. foreach ($cat as $key=>$row)
  10. {
  11. $list[$key]['cat'] = $row;
  12. $sub = $this->get_sub($row['id']);
  13. if($sub)
  14. {
  15. $list[$key]['sub'] = $sub;
  16. }
  17. }
  18. return $list;
  19. }
Далее создаем в корне сайте с DLE файл ostrov.php , ниже его содержимое :

Код PHP:
  1. <?
  2. header('Content-type: application/xml');
  3. define ( 'DATALIFEENGINE', true );
  4. define ( 'ROOT_DIR', dirname ( __FILE__ ) );
  5. define ( 'ENGINE_DIR', ROOT_DIR . '/engine' );
  6.  
  7. require_once ENGINE_DIR.'/classes/mysql.php';
  8. require_once ENGINE_DIR.'/data/dbconfig.php';
  9. require_once ENGINE_DIR.'/data/config.php';
  10. require_once ENGINE_DIR.'/modules/functions.php';
  11.  
  12. $my_menu = $db->get_sub();
  13.  
  14. $type = " <dropDown>
  15. <description caption="Тип устройства">
  16. <modifyResource placeholder="type"/>
  17. </description>
  18. ";
  19. foreach($my_menu as $id=>$value){
  20. /** раскомменитровать если надо вычеркнуть какую нить категорию и вставить id категорий
  21.   if($value['cat']['id']==302 || $value['cat']['id']==367 || $value['cat']['id']==13 || $value['cat']['id']==361){ continue; } **/
  22. $value['cat']['name'] = iconv( "windows-1251", "utf-8", $value['cat']['name']);
  23. if(count($value['sub'])<=0){ $end1 = "/"; $subend=""; }else{ $end1 = ""; $subend="</dropDownValue>"; }
  24. $type .= " <dropDownValue key="{$value['cat']['alt_name']}" caption="драйвера {$value['cat']['name']}"{$end1}>
  25. ";
  26. if(count($value['sub'])>0){
  27. $type .= " <dropDown>
  28. <description caption="Производитель">
  29. <modifyResource placeholder="producer"/>
  30. </description>
  31. ";
  32. foreach($value['sub'] as $subkey=>$subval){
  33. $subval['cat']['name'] = iconv( "windows-1251", "utf-8", $subval['cat']['name']);
  34. if(count($subval['sub'])<=0){ $end2 = "/"; $subend2=""; }else{ $end2 = ""; $subend2="</dropDownValue>"; }
  35. $type .= "
  36. <dropDownValue key="{$subval['cat']['alt_name']}" caption="{$subval['cat']['name']}"{$end2}>
  37. ";
  38. if(count($subval['sub'])>0){
  39. $type .= " <dropDown>
  40. <description caption="Серия">
  41. <modifyResource placeholder="seria"/>
  42. </description>
  43. ";
  44. foreach($subval['sub'] as $subkey2=>$subval2){
  45. if(count($subval2['sub'])<=0){ $end3 = "/"; }else{ $end3 = ""; }
  46. $subval2['cat']['name'] = iconv( "windows-1251", "utf-8", $subval2['cat']['name']);
  47. $type .= " <dropDownValue key="{$subval2['cat']['alt_name']}" caption="{$subval2['cat']['name']}"/>
  48. ";
  49. }
  50. $type .= " </dropDown>
  51. {$subend2}
  52. ";
  53. }
  54. }
  55. $type .= " </dropDown>
  56. {$subend}
  57. ";
  58. }
  59. }
  60.  
  61. $db->close ();
  62. echo('<?xml version="1.0" encoding="utf-8"?>
  63. <site xmlns="http://interactive-answers.webmaster.yandex.ru/schemas/site/0.0.1"
  64. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  65. xsi:schemaLocation="http://interactive-answers.webmaster.yandex.ru/schemas/site/0.0.1 /
  66. http://interactive-answers.webmaster.yandex.ru/schemas/site-0.0.1.xsd">
  67. <title>Поиск драйвера</title>
  68. <description>Поиск драйверов для всех типов устройств - выберите, тип устройства, производителя и серию</description>
  69. <rootUrl>http://kuchadrov.ru/</rootUrl>
  70. <protocol>HTTP</protocol>
  71. <resource>
  72. <fixed name="http://www.kuchadrov.ru">
  73. <placeholder name="type">
  74. <placeholder name="producer">
  75. <placeholder name="seria" terminal="true" separator="/"/>
  76. </placeholder>
  77. </placeholder>
  78. </fixed>
  79. </resource>
  80. <filters>
  81. '.$type.'
  82. </dropDown>
  83. </filters>
  84. </site>');
  85. ?>
Теперь описание - это скрипт моего сайта сами понимаете (три уровня вложенности), по этому чтобы его использовать необходимо будет немного доработать учитывая специфику вашего сайта
и так ostrov.php
строка 15 - заменить "Тип устройства" - на тип вашего первого уровня категории
строки 20-21 , если вы хотите удалить из островов некоторые категории - необходимо раскомментировать и перечислить там цифрами id категорий которые надо вычеркнуть.
строка 27 - заменить "Производитель" на название вашего второго уровня вложенности
строка 37 - заменить "Серия" - название вашего третьего уровня вложенности
строка 60 - указать название вашего сайта - будет выводиться в Яндекс.Островах
строка 61 - указать Описание данного острова или самого сайта - тоже будет выводиться в Яндекс.Острове
строка 62 - указать ваш домен с http , из него будет формироваться урл на который будут попадать ваши пользователи
строки 66 - 70 - если у вас не три уровня вложенности - необходимо будет добавить или убрать один уровень <placeholder

теперь в .htaccess в любом месте после RewriteEngine On добавляем строчку
Код PHP:
  1. RewriteRule ^ostrov.xml$ ostrov.php [L]
в итоге получится вот такая карта http://www.kuchadrov.ru/ostrov.xml
данная карта тестировала на Яндекс.Островах и вполне валидна и работает кто хочет может потыкаться в ней, посмотреть как они вообще работают - вот постоянная ссылка на Остров КучаДров.ру

Ниже выкладываю исходник чтобы можно было просто скачать и посмотреть, скрипт распространяется как есть, можете его использовать как хотите за исключением продажи - ссылки на наш сайт приветствуются joke , будут вопросы - предложения - всегда пожалуйста - жду

вот сам архив со скриптами - ostrov5207b3d68134c.zip данный архив создан бесплатным архиватором 7 Zip


Комментарии (0)

Нет комментариев. Ваш будет первым!

Добавить комментарий