Сегодня задался вопросом нахождения такой функции, но найденные решения оказались какими-то перегруженными. Вот слегка отшлифованная функция, если кому вдруг тоже пригодится:
function selfURL(){
if(!isset($_SERVER['REQUEST_URI'])) $suri = $_SERVER['PHP_SELF'];
else $suri = $_SERVER['REQUEST_URI'];
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$sp=strtolower($_SERVER["SERVER_PROTOCOL"]);
$pr = substr($sp,0,strpos($sp,"/")).$s;
$pt = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $pr."://".$_SERVER['SERVER_NAME'].$pt.$suri;
}
Раскопал среди старых наработок скрипт поиска, по которому еще год назад собирался написать статью, да все как-то руки не доходили. В общем-то ничего инновационного нет, просто упрощение задачи тем, кому надо написать поиск. Допустим, что искать мы будем в базе данных mysql.
Начнем с таблицы. Опредляем таблицу и поля, по которым производится поиск:
<?php
$namebox='name'; # Поле заголовка записи
$textbox='text'; # Поле содержимого записи
?>
подробнее >>Горячая новость от первоисточника: вышел релиз Neutrino Atomic Edition 0.8.7. Разработка этой версии вяло текла в течении 6 месяцев, и в течении этого времени постоянно находились какие-нибудь новые идеи и задумки, и вот наконец код пришел к тому состоянию, каким я хотел его видеть на момент нынешнего релиза.
Все системные функции интегрированы с системой хуков, поэтому в плагинах возможно реализовывать любую дополнительную функциональность, изменяя сайт на атомике до неузнаваемости.
Также была существенно переработана система блоков на сайте. С введением набора регионов, владельцам сайтов больше не требуется лезть в код, чтобы вывести дополнительный блок. Все это делается через админ-панель плагина blocks.
Расширение bjblocks кроме набора готовых php-блоков типа облака тегов, "предыдущая/следующая запись", и "похожие записи", предоставляет также удобный интерфейс для добавления новых php-блоков из других расширений, что позволяет разработчикам плагинов создавать дружественные для пользователя решения.
Встроенный WYSIWYG и простой интерфейс настройки в плагине settings делают Neutrino Atomic Edition по-настоящему дружественной к пользователю минималистичной CMS.
Также в релизе множество других нововведений, полностью переписанный код ядра, и множество вкусностей для разработчиков.
И самое главное: при всех этих добавлениях, Neutrino 0.8.7 не утратила своей основной черты: минималистичности. В архиве движок весит всего 68,3КБ. Было дописано много нового кода, но размер сохранился прежним за счет оптимизации старого кода и исключения старых ненужных плагинов из базовой сборки.
Скачать neutrino-0.8.7-fin.zip (68,3КБ)
Ранее я уже писал заметку о хуках в PHP, о том, что это такое, и даже предлагал свой метод расширения возможностей уже объявленных функций. Как всегда, практика - критерий истины, и, начав применять этот метод на практике, я нашел его довольно сложным и муторным в применении, так как в каждую функцию в конце приходится встраивать довольно громоздкую конструкцию, указывая там и имя функции, и массив ее аргументов, и возвращаемое значение, не забыв получить еще и глобальный массив $hook (кто не в курсе, прочитайте оригинальную статью).
подробнее >>Как известно, в PHP нельзя переназначить функцию, или как-то изменить ее функциональность после объявления. Чтобы обойти это ограничение, веб-программистами используются так называемые хуки, которые в простейшем варианте выглядят примерно так:
<?php
function my_function($param1,$param2,$param3){
if(function_exists('hook_my_function'))
return hook_my_function($param1,$param2,$param3);
# далее идет код, самой функции, например:
return $param1*$param2-$param3;
}
?>
Давайте разберемся, как это работает. В начале самой функции мы проверяем, не был ли создан хук, который должен заменить собой эту самую фукнцию. Если хук-фукнция объявлена, то ей передаются все те же параметры, что были переданы родительской функции(my_function), my_function возвращает значение, возвращенное функцией hook_my_function, не выполняя код своего тела.
В чем недостатки такого подхода?
подробнее >>