Этот вариант шапки отображает местоположение пользователя в "Кто на сайте" сразу после создания странички. То есть, вам не понадобится вручную редактировать файл
places.lng. Для установки скрипта необходимо вставить в incfiles/classes/functions.php
этот код (+/-)
/**
* Автозапись в файл places.lng местоположения пользователя
*
* @param string $file Локальный путь к файлу
* @param string $headmod Название папки с файлом(файлами)
* @param string $textl Название заголовка страницы
* @param string $uri GET-параметры (если они есть)
*/
public static function headmod($file, $headmod, $textl, $uri = '')
{
$writeToFile = function ($path, $arr, $fname, $uri) {
file_put_contents($path, $arr);
header('Location: '. $fname . $uri);
exit;
};
$length = 30 - strlen($headmod);
$spase = html_entity_decode(' ');
$fname = basename($file);
$url = $headmod .'/'. $fname . $uri;
$repeat = str_repeat($spase, 3);
$href = '='. $repeat .'"<a href=\'#home#/'. $url .'\'>'. $textl .'</a>"';
$places = ROOTPATH .'incfiles/languages/ru/places.lng';
$arrPls = file($places);
$array_result = array_filter(
$arrPls,
function ($item) use ($headmod) {
return strstr($item, $headmod);
}
);
$arrPls[] = "\r\n". $headmod . str_repeat($spase, $length) . $href;
if (empty($array_result)) {
$writeToFile($places, $arrPls, $fname, $uri);
} else {
$arrUri = array_map(
function ($item) {
preg_match('~(<a[^>]*>).*</a>~ui', $item, $matches);
$pattern = '~<a href=\'#home#/[\w\d]+/?([\w\d-]+\.php?.*)\'>~';
return preg_replace($pattern, '$1', $matches[1]);
},
$array_result
);
in_array($fname . $uri, $arrUri) ?: $writeToFile($places, $arrPls, $fname, $uri);
}
}
А для создания новой страницы использовать этот код
Шапка и футер (+/-)
<?php
const _IN_JOHNCMS = 1;
$dir = explode(DIRECTORY_SEPARATOR, __DIR__);
$headmod = end($dir); # автоопределение папки
$textl = 'Моя страница';
require_once '../incfiles/core.php';
require_once '../incfiles/head.php';
functions::headmod(__FILE__, $headmod, $textl);
/*
Тут код вашей странички
*/
require_once '../incfiles/end.php';
Или этот (если надо передавать параметры)
<?php
const _IN_JOHNCMS = 1;
$dir = explode(DIRECTORY_SEPARATOR, __DIR__);
$headmod = end($dir); # автоопределение папки
$textl = 'Моя страница с параметрами';
require_once '../incfiles/core.php';
require_once '../incfiles/head.php';
functions::headmod(__FILE__, $headmod, $textl, '?var=value');
/*
Тут код вашей странички
*/
require_once '../incfiles/end.php';
Например, вы создали новый файл, и этот файл принимает GET-параметры var=value, и вы хотите, чтобы в разделе "Кто на сайте" ваш файл отображался, как "Моя страница с параметрами" -- тогда вызов функции надо прописать с такими параметрами:
functions::headmod(__FILE__, $headmod, 'Моя страница с параметрами', '?var=value');
Скрипт проверит наличие соответствующей записи в языковом файле places.lng , и
при её отсутствии допишет новые параметры.
Я позже допишу проверку не по имени папки в places.lng, а по передаваемому URI, чтобы можно было в одну папку добавлять сколько угодно файлов, и скрипт мог их корректно отслеживать. <---это реализовано.
ДоХтор, это при каждом вызове будет запись файла?
# Koenig (11.07.2016 / 12:10)
ДоХтор, это при каждом вызове будет запись файла?
Нет, только если нет в языковом файле соответствующей записи. Если записи нет, скрипт запишет один раз.
ДоХтор, и ещё мне кажется редирект на ури надо делать, хотя просто в глаза бросилось
# Koenig (11.07.2016 / 17:50)
ДоХтор, и ещё мне кажется редирект на ури надо делать, хотя просто в глаза бросилось
Да, Димон, если будут передаваться гет-параметры, то да, редирект на ури.
Полезно...а то я уже запутался в местах)
# MARAZM (31.07.2016 / 16:30)
Полезно...а то я уже запутался в местах)
Спс ) Но есть один недостаток - если в файле places.lng уже есть запись значения из $headmod, то при добавлении новых файлов в эту же папку, ссылки на новые файлы записываться в places.lng не будут. Я сегодня это исправлю.