001.gif

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

Данный урок описывает концепцию вспомогательных функций PHP и процесс написания обобщенного кода, который можно будет использовать снова и снова. Данные функции ускоряют и делают более ясным процесс разработки приложения, так как повторяющиеся задачи сводятся к минимуму.

Вспомогательная функция для ссылок

Одной из распространенных повторяющихся задач является написание ссылок. С помощью создания вспомогательной функции для данной задачи мы можем сократить время разработки приложения, исключить возможность синтаксических ошибок, и сделать код более простым для модификации, если файл будет удален или сайт будет перемещен на другой домен. Для начала напишем очень простую функцию в файле helpers.php:

function get_domain()
{
//Переменная $domain содержит имя домена, на котором выполняется ваше приложение.
$domain = "http://www.my-site-domain.com/";
return $domain;
}

На эту маленькую функцию можно использовать везде, где требуется получить полный путь к файлу, и она может использоваться снова и снова во время разработки сайта. Такой подход более удобен, чем получение домена с помощью метода $_SERVER[‘HTTP_HOST’], так как вывод остается неизменным в случае если кто-то наберет домен с или без «www», а также работает, если ваш сайт расположен в субдомене, например «http://localhost/my-site».

Также такой метод очень полезен при перемещении сайта, потому что все абсолютные пути будут ссылаться на единственную функцию, и изменение переменной $domain на новое имя домена изменит все ссылки сразу.

Модернизируем код

Теперь создадим функцию с названием «anchor», которая будет выводить правильную, стандартную html строку, заполненную в соответствии с параметрами, например:

<a href="http://www.my-site-domain.com/new-page.php" title="New Page">New Page</a>

А так должен выглядеть исходный код:

echo anchor('new-page.php','New Page');

Итак, у нас есть функция PHP с двумя аргументами: один — ссылка, другой — текст с названием. В файле helpers.php пишем новую функцию:

function anchor($link, $text) // 1
{
$domain = get_domain(); // 2
$link = $domain . $link; // 3
$data = '<a href="' . $link . '"';
$data .= ' title="' . $text . '"'; //4
$data .= '>';
$data .= $text; //4
$data .= "</a>";
return $data;
}

Здесь определяется функция «anchor» с двумя аргументами.

  1. Получаем имя домена с помощью функции get_domain(), которая уже создана
  2. Дополняем переменную $link, которая является аргументом функции.
  3. Создаем строку вывода в переменной $data, с использованием переменной $text и для создания видимого текста для сайта и для тэга ‘title’ для ссылки.

Теперь можно проверить работу. Создаем новый файл index.php в той же папке, что и файл helpers.php file. Содержание фала index.php:

require('helpers.php');
echo anchor('new-page.php','New Page');

Мы соединяем два файла с помощью функции require(), а затем вызываем функцию anchor(). Браузер должен выдать результат:

<ahref="http://www.my-site-domain.com/new-page.php"title="New Page">$New Page</a>

Добавим гибкости

Созданная функция может быть очень полезной, но нет сомнений, что она нуждается в улучшениях. Нужно добавить три новых свойства, прежде чем она станет действительно чудесной и гибкой. Первое, свойство добавления пользовательского тэга title. Второе, возможность добавлять правила CSS. И третье, свойство для открытия в новом окне, если нужно.

Рассмотрим сначала пользовательский тэг title. Тэг title очень важен для целей SEO, и если вы не добавляли его в ссылки до сих пор, то пора сделать изменить привычки. Наша функция поможет в данном процессе. Если вы ничего не добавили, то по умолчанию отображаемый текст будет вставлен в тэг title.

function anchor($link, $text, $title) //1
{
$domain = get_domain();
$link = $domain . $link;
$data = '<a href="' . $link . '"';
if ($title) //2
{
$data .= ' title="' . $title . '"'; //3
}
else
{
$data .= ' title="' . $text . '"'; //4
}
$data.= '>';
$data .= $text;
$data .= "</a>";
return $data;
}

Это модифицированная версия функции anchor()

  1. Добавляем третью переменную $title.
  2. Проверяем, ввели ли пользователь тэг title.
  3. Добавляем к строке $data часть, которая устанавливает тэг title.
  4. Устанавливаем тэг title по умолчанию с помощью переменной $text.

Теперь вызов функции будет выглядеть так в файле index.php:

echo anchor('new-page.php','New Page','Custom Title Message!');

А вывод будет таким:

<a href="http://www.my-site-domain.com/new-page.php" title="Custom Title Message!">New Page</a>

Опции стиля и окно вывода

Для того, чтобы можно было использовать функцию даже если нужно добавить стиль CSS или вывод в новом окне, добавим четвертую переменную и скорректируем вывод в соответствии с изменениями.

Нужно, чтобы функция могла распознать, что мы хотим добавить класс CSS class, CSS ID, или тэг target. Также нужно обеспечить возможность использовать несколько опций сразу или только одну опцию, или вообще без опций. Начнем модифицировать функцию anchor:

function anchor($link, $text, $title, $extras)//1
{
$domain = get_domain();
$link = $domain . $link;
$data = '<a href="' . $link . '"';
if ($title)
{
$data .= ' title="' . $title . '"';
}
else
{
$data .= ' title="' . $text . '"';
}
if (is_array($extras))//2
{
foreach($extras as $rule)//3
{
$data .= parse_extras($rule);//4
}
}
if (is_string($extras))//5
{
$data .= parse_extras($extras);//6
}
$data.= '>';
$data .= $text;
$data .= "</a>";
return $data;
}

Добавлен четвертый аргумент, который называется «$extras.» Он содержит все дополнительные пользовательские опции.

  1. Проверяем, передается ли с этой переменной массив. Мы будем использовать массив для передачи множественных опций в функцию, например, для установки CSS ID и класса CSS для ссылки.
  2. Если это массив, то проходим по нему и обрабатываем каждый элемент с помощью новой функции «parse_extras.» Данная функция определяет, что мы хотим добавить и форматирует корректный соответствующий текст html.
  3. Если $extras является строкой, то мы хотим передать только одно правило. Таким образом можно вызвать функцию parse_extras() для одного элемента. Функция is_string() возвращает FALSE, если переменная пустая. Таким образом, если ничего не было передано через $extras, то не будет выполняться никакого кода.

Также напишем новую функцию parse_extras():

function parse_extras($rule)
{
if ($rule[0] == "#") //1
{
$id = substr($rule,1,strlen($rule)); //2
$data = ' id="' . $id . '"'; //3
return $data;
}
if ($rule[0] == ".") //4
{
$class = substr($rule,1,strlen($rule));
$data = ' class="' . $class . '"';
return $data;
}
if ($rule[0] == "_") //5
{
$data = ' target="' . $rule . '"';
return $data;
}
}

Данная функция требует использовать правильный идентификатор для наши опций. Если мы передаем CSS ID, то он будет начинаться с #. Если мы передаем класс CSS, то он начнется с . . А если передается тэг target, то он начнется с _.

  1. Проверяем первый символ строки с помощью $string[0]. Такой синтаксис позволяет получить первый элемент массива, но он также работает и для получения символа в строке.
  2. Создаем новую переменную, которая заполняется строкой $rule без первого символа. Теперь мы идентифицировали правило и первый символ в строке не нужен для корректного формирования html текста. Такая комбинация функций substr() и strlen() очень полезна для отбрасывания первого символа в строке.
  3. Теперь можно создать строку вывода $data. Метод повторяется для класса CSS и для тэга target. Стоить отметить, что для тэга target нам не нужно отбрасывать первый символ.

Теперь можно модифицировать вызов функции anchor().

echo anchor('new-page.php','New Page','Custom Title Message!','#special_link');

Здесь мы передаем CSS ID, а вывод будет иметь вид:

<a href="http://www.my-site-domain.com/new-page.php" title="Custom Title Message!" id="special_link">New Page</a>

В случае задания класса, ID и для открытия в новом окне, вызов функции будет иметь вид:

$extras = array('#special_id','.special_class','_blank');
echo anchor('new-page.php','New Page','Custom Title Message!',$extras);

Предварительно заданная переменная массива используется только для того, чтобы придать ясность коду. Вывод функции будет иметь вид:

<a href="http://www.my-site-domain.com/new-page.php" title="Custom Title Message!" id="special_id" class="special_class" target="_blank">New Page</a>

Ссылка Mailto

В завершении мы рассмотрим, как создать ссылку mailto в вашем приложении. Создадим функцию mailto(), которая будет очень похожа на функцию anchor() с одним существенным отличием: мы реализуем шифрование вывода html, таким образом спам сканеры не смогут получить адрес вашего клиента.

Для сокрытия email адреса будет использоваться функция str_rot13(), которая просто берет строку и перемещает все алфавитные символы на тринадцать позиций в алфавите.

Функция шифрования будет выводить наш код в искаженном виде, а затем с использованием функции JavaScript можно сдвинуть все символы обратно на тринадцать позиций и восстановить оригинальное значение. Хотя такая функция выполняется на строне клиента, она является действием, и текст на странице остается без изменений. Таким образом, спам-сканеры получают мусор вместо адреса.

Функция mailto() будет выглядеть так:

function mailto($email, $text, $title, $extras) //1
{
$link = '<a href=\"mailto:' . $email; //2
$link = str_rot13($link); //3
$data = '<script type="text/javascript">document.write("'; //4
$data .= $link; //5
$data .= '".replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));
</script>';
$data .= '"';
if ($title) //6
{
$data .= ' title="' . $title . '"';
}
else
{
$data .= ' title="' . $text . '"';
}
if (is_array($extras))
{
foreach($extras as $rule)
{
$data .= parse_extras($rule);
}
}
if (is_string($extras))
{
$data .= parse_extras($extras);
}
$data .= ">";
$data .= $text;
$data .= "</a>"; //7
return $data; //8
}

Давайте посмотрим на отличия:

  1. Функция имеет четыре аргумента, хотя первый переименован в $email с целью усилить наглядность..
  2. Создаем новую переменную для формирования ссылки mailto. Мы добавили обратную косую черту перед кавычками, так как строка будет передана в функцию JavaScript и нужно сделать все, чтобы двойные кавычки были правильно распознаны.
  3. Выполняем функцию str_rot13() для переменной $link.
  4. Создаем переменную $data, которая содержит JavaScript.
  5. Помещаем кодированную переменную $link в середину
  6. Теперь JavaScript добавлен к переменной $data, остаток функции выглядит знакомым
  7. Проверяем, добавлен ли пользовательский тэг title, и затем обрабатываем $extras. Закрываем наш тэг…
  8. … и возвращаем данные.

Теперь можно использовать следующий синтаксис в файле index.php для создания ссылки mailto:

echo mailto('secret@emailaddress.com','Contact Me');

Или, если используются пользовательские настройки, так:

$extras = array('#special_id','.special_class','_blank');
echo mailto('secret@emailaddress.com','Contact me','Contact your good pal Barry.',$extras);

h++p://ruseller.com/lessons.php?rub=37&id=638

Категория: PHP, HTML, CSS... | Теги:

Оставьте свой комментарий