Альтернативная "Шапка" для JohnCMS - 6.x.x

903
.
ДоХтор

Этот вариант шапки отображает местоположение пользователя в "Кто на сайте" сразу после создания странички. То есть, вам не понадобится вручную редактировать файл 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, чтобы можно было в одну папку добавлять сколько угодно файлов, и скрипт мог их корректно отслеживать. <---это реализовано.
.
(\/)____o_O____(\/)

ДоХтор, это при каждом вызове будет запись файла?

.
# Koenig (11.07.2016 / 12:10)
ДоХтор, это при каждом вызове будет запись файла?
Нет, только если нет в языковом файле соответствующей записи. Если записи нет, скрипт запишет один раз.
.
(\/)____o_O____(\/)

ДоХтор, и ещё мне кажется редирект на ури надо делать, хотя просто в глаза бросилось

.
# Koenig (11.07.2016 / 17:50)
ДоХтор, и ещё мне кажется редирект на ури надо делать, хотя просто в глаза бросилось
Да, Димон, если будут передаваться гет-параметры, то да, редирект на ури.
.
КИДАЛА!!! Дел не иметь!

Полезно...а то я уже запутался в местах)

.
# MARAZM (31.07.2016 / 16:30)
Полезно...а то я уже запутался в местах)
Спс ) Но есть один недостаток - если в файле places.lng уже есть запись значения из $headmod, то при добавлении новых файлов в эту же папку, ссылки на новые файлы записываться в places.lng не будут. Я сегодня это исправлю.
.
Переписал
.

ДоХтор, В тест

Всего: 9