XML sitemap to HTML sitemap v. 1.0

17 апреля 2010 | Kalimdor

Решил поделиться с вами одной своей разработкой. Данный скрипт я использую для того чтобы преобразовать одну XML карту сайта в одну или несколько HTML карт сайта с определённым количеством ссылок на каждой странице.

Принцип работы скрипта простой — в форму вводите адрес сайта и получаете ссылку на zip архив с HTML картами и код для вставки ссылок на карты в нужное место сайта. Помимо этого присутствует функция автоочистки, которая позволяет удалять сайтмапы старше заданного срока. Небольшая инструкция пользователя идёт вместе со скриптом в архиве.

Буду очень признателен за багрепорты и идеи по улучшению скрипта. Мои контакты в сайдбаре :) .

Скачать скрипт


Отличная галерея для Joomla! 1.5.x

20 сентября 2009 | Kalimdor

Проблема выбора галереи для сайта стара как мир. С одной стороны их просто дофига, с другой — стоящих очень и очень мало, при том что удовлетворяющих хотя бы приблизительно потребностям разработчика и того меньше.

Года два назад я тоже озаботился данным вопросом. Чего только я не перепробовал с тех пор и сделал кое-какие выводы. Существует три вида галерей. Первые — это монстры вроде Coppermine Gallery. Это мощные галереи, на которых можно сконструировать очень и очень многое, но с другой стороны в настройке и допиливании они достаточно сложны, так что для не чего-нибудь не сверхсложного они являются не самым оптимальным решением. Вторые — убогое глючное говно , вроде Datso Gallery (это такой компонент галереи для джумлы). Думаю распинаться на их счёт не стоит. И наконец третьи — это галереи вида JoomGallery, уступающие по функциональности первому виду и не принадлежащие второму виду. Героем моего поста будет как раз JoomGallery.

На эту галерею я наткнулся где-то в июле этого года и понравилась она мне практически сразу. Ну сами посудите — нативная поддержка Joomla! 1.5.x, большое количество разнообразных настроек альбомов, прав просмотра и внешнего вида категорий и подкатегорий, несколько режимов загрузки картинок, несколько возможностей открытия полноразмерных изображений (новым окном, всплывающим окном, контейнером DHTML, Lightbox, Thickbox3 или же Slimbox ). Но без ложки дёгтя не обошлось как всегда, а именно — перевод на русский есть, но он достаточно тяжёлый и не слишком понятный. Это первое. А второе — нельзя выбирать обложку для категории из картинок её подкатегории. Но это не критические недостатки, так что можно сказать, что всё замечательно :) .

Ну и на последок ссылки:

___________________________________________

Так как я что-то подотстал от блогосферы, то постовых не будет. Если имеете на примете какие-нибудь интересные блоги по теме вебстроительства — буду благодарен, если напишете про них в комментах.


Сегодня будет свежая сборка вордпресса для сплогов. Главное отличие от предыдущей сборки заключается в том, что теперь в ней есть синонимайзер. В итоге прежде чем публиковаться, текст синонимизируется. Предупреждаю сразу, чем больше база синонимов и частота синонимизации текста, тем больше ресурсов потребляет плагин и тем дольше он работает. Поэтому, чтобы не повесить хост, обязательно распределяйте обновления сплогов так, чтобы они обновлялись в различное время. Так же в плагине я отключил синонимизацию заголовков новостей. Если она вам нужна, то открываете в папке plugins файл simplesyn21.php и удаляете два слеша в начале 7-й строки. Теперь подробнее о плагинах, вошедших в сборку:

  1. Akismet. Классика жанра. Хотя при умелой настройке можно использовать спамеров для увеличения «человечности» сплога в глазах поисковый систем.
  2. Anti-XSS attack. Из названия и так ясно. Закрывает XSS дыры в вордпрессе.
  3. Bookmarkz. Данный плагин внизу каждого поста вставляет ссылки на добавление страницы в сервисы социальных закладок. Опять таки, с ним сплог выглядит «человечнее».
  4. Exec-PHP. Плагин, позволяющий выполнению PHP кода в текстах постов, страницах и виджетах. С помощью него в сайдбар добно добавлять сапу. К плагину приложил перевод от Dimox'a.
  5. FeedWordPress. Это основа будущего сплога. Плагин синдицирует контент с rrs/atom лент. В сборке плагин с переводом отсюда.
  6. Google XML Sitemaps. Создаёт и обновляет карту сайта в xml формате. Увеличивает скорость индексации сайта.
  7. MaxSite Russian Date. Представляет даты в русскоязычном формате.
  8. Platinum SEO Pack. Генерирует метатеги и приводит тайтлы в нормальный вид.
  9. Russify Comments Number. Склоняет слово «комментарий».
  10. RusToLat. Транслитирует русские слова в латиницу. Необходим для ЧПУ.
  11. Simple Syn 2.1. Плагин синонимизации текста. Использует базу данных. Синонимы воспринимает в двух форматах: word| syn1, syn2 ... или syn1:syn2:syn3... . В первом случае замена слова word идёт рандомно на слово или сочетание, которое находится за чертой. Во втором случае при синонимизации слова syn (номер) выбирается синоним из всех в строке, т.е. синонимы равноправны. Плагин работает как с русским текстом так и с английским.
  12. Simple Tags. Плагин для управления тэгами.
  13. WP-Noindex. Все ссылки в комментариях заключает в теги <noindex></noindex>.
  14. WP-PageNavi. Плагин для нумерации страниц. Позволяет резко увеличить количество страниц второго и третьего уровня. Маст хэв для MFS.
  15. WP-Print. Делает версии статей, подготовленные к печати.
  16. WP All-in-One tools. Сборник плагинов, которые позволяют улучшить работу вордпресса.
  17. WP Super Cache. Плагин ускоряет нагрузку на сервер и ускоряет работу сайта.
  18. Auto_more + advert. Автоматически подставляет тег more. В полной версии статьи показывает рекламный код, который вы поставили. Отлично подойдёт для контекста.
  19. WP-NoRef. Загоняет все внешние ссылки на блоге в тег ноуиндекс и ставит на них атрибут nofollow.

Скачать.

Только после этой сборки не говорите, что кнопки «Бабло» не существует :) .

_______________________________________________________________________

В связи с большим количеством спама на моём блоге объявляю бессрочную акцию. Отныне нормальные комментаторы с нормальными блогами будут получать ссылки в моих постовых.

_______________________________________________________________________

Постовый.

Бесколёсный рассказывает про свою сетку блогов.

Spryt увлёкся ассемблером :) .


Вообщем полезная опция для пользовательской системы, ведь ни для кого не секрет, что юзер на сайте существо забывчивое :) и зачастую свой пароль он не помнит. Именно поэтому функция восстановления пароля на сайте нужна. На этот раз код будет оформлен в виде функции. Где и в каком месте её применить, решать вам :) .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
  // Функция восстановления пароля, в качестве аргументов принимает почтовый ящик дескриптор соединения с базой данных,  название сайта и мыло отправителя и возвращает true, если операция восстановления пароля прошла успешно, false в противном случае
  function restoration_password ($email, $dbdeskriptor, $site_name, $adm_mail)
    {
      // Проверим валидность мыла
      if(!preg_match("/^[dw-_.]+@[dw-.]+.[w]{2,4}/i",$email))
        {
          mysql_close ($dbdeskriptor);
          echo "Некорректно введён e-mail адрес";
          return false;
        }
      // Составим запрос к базе данных
      $query_select = "SELECT `login`,`pass` FROM `user` WHERE mail="$email"";
      // Проведём запрос к базе данных
      $ath = mysql_query ($query_select, $dbdeskriptor);
      // Проверим успешность запроса
      if (!$ath)
        {
          mysql_close ($dbdeskriptor);
          echo "Ошибка базы данных";
          return false;
        }
      // Извлечём результаты запроса
      $result = mysql_fetch_assoc ($ath);
      // Проверим на NULL результат запроса
      if (isset ($result ['user']))
        {
          mysql_close ($dbdeskriptor);
          include "Такого e-mail в базе нет!";
          return false;
        }
      // Если пользователь существует, сгенерируем для него новый пароль, состоящий из 6 знаков
      $simvols = array ("0","1","2","3","4","5","6","7","8","9",
                        "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                        "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
      for ($key = 0; $key < 6; $key++)
        {
          shuffle ($simvols);
          $string = $string.$simvols[1];
        }
      // Найдём хеш пароля
      $pass = md5 ($string);
      // Составим запрос к базе данных
      $query_update = "UPDATE user SET pass = "$pass" WHERE mail="$email"";
      // Проведём запрос
      $ath = mysql_query ($query_update, $dbdeskriptor);
      // Проверим результат запроса
      if (!$ath)
        {
          mysql_close ($dbdeskriptor);
          echo "Ошибка базы данных";
          return false;
        }
      // Вышлем письмо с логином и новым паролем пользователю
      $ath = mail ("$email", "Восстановление пароля на сайте {$site_name}", "Вы запросили восстановление логина и/или пароля на сайте {$site_name}. Ваш логин и новый пароль:n
            Логин: {$result['login']}n
            Пароль: {$string}"
, "From: amin <{$adm_mail}>");
      // Проверим успешность отправки
      if (!$ath)
        {
          include "Ошибка при отправке письма";
          return false;
        }
      echo "Пароль восстановлен";
      return true;
    }
?>

Ну собственно всё, ничего сложно в функции нет.
____________________________________________
Постовый.
Обзор блогосферы от Virtual-lab.
Рецепт заработка от Спрута.
А здесь можно выйграть iPhone :) .


С этим постом я припозднился, но лучше поздно, чем никогда :) . Теперь перейдём к делу. Сначала код формы для отправки данных. Его можно будет вставить в любое нужное вам место на сайте. И так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
  <head>
    <title>Вход для пользователя</title>
  </head>
  <body>
    <table>
      <tr><td>
        <form action= "login.php" method="post">
          Логин: <input type = "text" name = "login">
          Пароль: <input type = "text" name = "pass">
          <input type = "checkbox" name = "zap" value= "yes"> Запомнить
          <input type = "submit" value = "Вход">
        </form>
      </td></tr>
    </table>
  </body>
</html>

При вставке в php-код и выводе через функцию echo () не забывайте экранировать кавычки обратным слешем (). Обрабатывает входящие данные файл login.php. Структура таблицы пользователей была описана в предыдущем посте.

Теперь код самого login.php (код прокомментирован):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
 // Здесь введите адрес своего сайта, он используется для ограничения доступа по URL к кукам  
 $host = "www.panel.demo.ru";
  // Получим входные данные
  $login = $_POST ['login'];
  $pass = $_POST ['pass'];
  $zap = $_POST['zap'];
  // Проверим входящие данные
  // Проверка вводимых данных на корректность
  if(!preg_match("/[A-Za-z0-9]/",$login))
    {
      include "error.php"; // Здесь и далее можно поставить урл на свою страницу ошибки
      exit();
    }
  if(!preg_match("/[A-Za-z0-9]/",$pass))
    {
      include "error.php";
      exit();
    }
  if(!($zap == "yes") && !($zap ==""))
    {
      include "error.php";
      exit ();
    }
  // Найдём хеш пароля
  $pass = md5 ($pass);
  // Найдём пользователя с введённым логином
  // Составим запрос
  $query = "SELECT `user`,`pass` FROM `user` WHERE login = "$login"";
  // Приконнектимся к БД
  include "config.php";
  // Произведём запрос
  $ath = mysql_query ($query, $dbdeskriptor);
  // Проверим выполненость запроса
  if (!$ath)
    {
      mysql_close ($dbdeskriptor);
      include "error.php";
      exit ();
    }
  // Извлечём результаты запроса
  $result = mysql_fetch_assoc ($ath);
  // Проверим наличие логина
  if (!isset($result ['login']))
    {
      mysql_close ($dbdeskriptor);
      include "error.php";
      exit ();
    }
  // Если логин есть проверим правильность пароля
  if (!($pass == $result ['pass']))
    {
      mysql_close ($dbdeskriptor);
      include "error.php";
      exit ();
    }
  // Если пароль правильный, то производим запись в куки в зависимости от того, будет запоминание пользователя или нет
  if ($zap == "yes")
    {
      setcookie ("l","$login", time () + 172800, "/", $host);
      setcookie ("p","$pass", time () + 172800, "/", $host);
    }
  else
    {
      setcookie ("l","$login", 0, "/", $host);
      setcookie ("p","$pass", 0, "/", $host);
    }
  // Выводим сообщение об успешности залогинивания
  echo "Логин и пароль приняты системой";
?>

Вместо простого вывода сообщения об успешности залогинивания, можно сделать вывод сообщения с редиректом на прошлую страницу. Если интересно как это сделать — отпишите в комментариях, в следующем посте опубликую решение. На сегодня пока всё.

____________________________________________________________________

Постовый.
Полубомж написал на тему паления тем. Достаточно давно я тоже писал на эту тему.
Бесколёсный вернулся!. Жду новых интересных постов от него.

__________________________________________________________
P.S.
Съездил на Московский автосалон Мотор Экспо 2008. Выставка проходила в Крокус Экспо и была просто шикарной. Самые лучшие стенды имхо были у Ауди, Мерседеса и БМВ. Во многом благодаря большой концентрации отличных тачек на квадратный метр стенда. Думаю не стоит объяснять, почему на их стендах было очень много народу :) . Даже машину себе выбрал. По соотношению цена/качество/стиль/мощность/практичность мне понравился Mitsubishi Lancer Evolution X. Думаю начать копить на неё :) . Не, ну правда красавица:


Страница 1 из 3123»