php Library of the general functions Библиотека общих функций author I

 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
71
72
73
74
<?php
/**
* Library of the general functions
* Библиотека общих функций
* @author IT studio IRBIS-team
* @copyright © 2011 IRBIS-team
*/
/////////////////////////////////////////////////////////
/**
* Generation of page of an error at access out of system
* Генерация страницы ошибки при доступе вне системы
*/
if(!defined('IRB_KEY'))
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../404.html'));
}
/**
* Функция формирования GET-параметров
*/
function href()
{
global $GET; // Объявляем массив $GET, сформированный ранее, глобальным
$tmp = $GET; //Переписываем переменную, что бы не влиять на глобальный массив
$href = '';
$host = IRB_HOST;
// Получаем массив аргументов переданных в функцию href(тут_вот)
$arg = func_get_args();
// Задел на будущее - ссылки для админки
if(defined('IRB_ADMIN'))
$host .= '/admin';
// Ссылка на корень сайта
if($arg[0] == 'host')
return IRB_HOST;
// Если аргумент - массив, берем первый элемент.
if(is_array($arg[0]))
$arg = $arg[0];
// Перебираем полученные аргументы
foreach($arg as $var)
{
$param = explode('=', $var); // Разделяем имя переменной и значение (page=gallery, например)
// Если в массиве $GET ($tmp) есть ключ, полученный выше (в данном случае 'page')
if(array_key_exists($param[0], $tmp))
$tmp[$param[0]] = $param[1]; // То этому ключу присваиваем полученное значение
else // Иначе выдаем ошибку, что такая переменная не зарегистрирована
die('The variable <b>'. $param[0] .'</b> is not defined');
}
// обрезаем те параметры, которые не передавались в аргумент
$cnt = array_flip(array_keys($tmp));
$tmp = array_slice($tmp, 0, $cnt[$param[0]] + 1);
// Теперь поочередно вставляем значения из $GET ($tmp) в ссылку
foreach($tmp as $var => $val)
if(IRB_REWRITE === 'on')
$href .= '/'. $val; // Если реврайт включен, через слэш
elseif(!empty($val))
$href .= '&'. $var .'='. $val; // Если нет - обычные GET параметры
// Обрезаем пустоту скраю, чтобы было красивее
if(IRB_REWRITE === 'on')
return $host . hrefTrim($href); // Обычная функция trim() не подходит, пользуем свою
else
return $host .'?'. trim($href, '&');
}
/**
* Адаптированный аналог функции trim()
*/
function hrefTrim($link)
{
return preg_replace('#(/0)+$#', '', $link);
}