Просмотр поста

.
ДоХтор

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