Доброго времени суток знатаки php и других языков, хочу продумать для себя новый переключатель так как мне кажется что у меня логика выше крыши улетела, и в данный момент мой переключатель не есть отличным. Вот сейчас у меня с нуля, вход, регистрация, страница юзеров без понтов чисто вывод инфы, добавления в друзья, сообщения но еще не доделал их чисто написать сообщения пока что можно( еще парится долго) я же начинающий и только что новое вижу стразу применяю либо если читаю или узнаю удаляю редактирую, все. Вот как вы считаете как сделать такой переключатель как например в любой соц сети типа: NEWS REGISTER MESSAGES FRIENDS EXIT типа нажал на register перехожу к регистрации нажал на messages перехожу в сообщения, но тут конечно если юзер авторизовался, ну и так далее. Как такое сотворить можно, мне когда то помогали с переключателем, но то было уже давно когда только прям вообще толку не чего не знал. Жду положительных ваших предложений.
Это называется "навигация". Список ссылок на соотв. страницы. Все. Если ЧПУ используется - то разные ссылки, если без него, но с одной точкой входа, то ссылки с разными GET_параметрами.
Ссылка знаешь что такое? А теперь представь что, их пачка. Вот тебе и "переключатель". Куда подробнее-то? У тебя эти страницы, с новостями, с регой, с друзяшками, существуют? Как ты на них попадаешь?
--- Добавлено --- Удалите бота! --- Добавлено --- вау, надажи, ссылки! прост чума это перевернёт интернет!
@Fell-x27 Да эти страницы существуют, попадаю на них по разному, например get. Это массив из ссылок что ли должен быть? --- Добавлено --- @igordata И что дальше?
Такое чувство, что ты представлял навигационное меню как нечто сложное, и сейчас, когда тебе говорят, что "ну тупо ссылки в кучу собери и CSS натяни, шоб бохато было", у тебя когнитивный диссонанс, типа "и все?". Да, и все. Просто ссылки.
https://github.com/MouseZver/Mouse_Project после ЧПУ идет роутинг где и я остановился. Это пи.. дамы и господа.
@igordata Лан вопрос звучит так, как сделать такой переключатель, то-есть чтобы каждая ссылка имела имела единую точку входа, у меня есть переключатель могу показать, но я считаю что он не правильный, так как я подключаю в нем все свои файлы, и получается для каждого файла есть свой вход.
ты хочешь намутить свой роутер? на каком движке у тебя сайт? --- Добавлено --- в чем беда? --- Добавлено --- @MouseZver PHP: Engine::_( 'STARTING', explode ( '/', mb_strtolower ( trim ( parse_url ( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), ' /' ), 'UTF-8' ) ?: Engine::$RAY['RAY']['START_DEFAULT_INDEX'] ) ); PHP: echo Engine::_( 'TRIGGER', $OB ); че эта? --- Добавлено --- ты ашалел методы через юзерфунк дёргать? --- Добавлено --- пипец давай заново ООП осмысляй и про интерфейсы и наследование почитай --- Добавлено --- но за попытку пять баллов, чо
@MouseZver это пример, или что ты мне хотел показать? открыл файлы некоторые и в них мне текстовый редактор, выдал ошибку в некоторых файлах, например в авторизации.
1) Есть точка входа - index.php в корне сайта. 2) Есть GET-параметр page. 3) Для каждой страницы он свой должен быть. Хоть номер, хоть надпись. Все равно никто, кроме самих веб-разработчиков не читает URL-ы. 4) В index.php пишешь switch по $_GET['page']. Для каждой известной страницы отдаешь страницу. Хоть инклудом ее прям тут на месте цепляй, я не знаю же, какая у тебя архитектура. Все неизвестные валятся в секцию default. 5) В секции default отдаешь 404й заголовок. Или переадресацию на главную страницу. Вот ты и написал простой как лом, но настолько же надежный роутер. Только не забудь перед ним написать что-то типа PHP: $_GET['page'] = $_GET['page'] ?? ''; В итоге адрес /index.php?page=friends будет вести на страничку с друзяшками.
@Fell-x27 Буду за ноутом покажу как я с помощью пользователей этого форума делал переключатель. Да я предлогал при помощи switch() сделать, но мне сказали что так будет лучшие и меньше писанины, но не говорили что это не правильно использовать switch(){} так что с ним я тоже буду пробовать сделать.
есть $_SERVER['REQUEST_URI'] и збз, гет не нужен тут --- Добавлено --- свич быстро заёбывает просто. поэтому я сделал другую схему.
Знания. 20 и более вариантов загружены в голове и все помечены "говнокод". К концу дня пока написал легкий код. PHP: $a = [ 'panel', 'gg', 1 ]; $b = [ 'panel', 'panel/?/access', 'panel/?/option', ]; $z = []; foreach ( $b as $regex ) { $EXP = explode ( '/', $regex ); $map = array_map ( function ( $K, $P ) use ( $a ) { switch ( $P ) { case '?': return $a[$K] ?? NULL; break; case ':ID': return is_numeric ( $a[$K] ) ? $a[$K] : NULL; default: return $P; } }, array_keys ( $EXP ), $EXP ); if ( $a == $map ) { var_export ($a); echo '<br>'; var_export ($map); break; } } АГА. не любитель стрелок. Пока в том месте помечу говнокод. Со временем. я их никогда не понимал кроме как основа правил методов, не к чему применять. С этим все гуд. --- Добавлено --- да это пример, где нету паутины в классах за классом. Там и докопаться не далеко до URI. Про ошибку не понял. Вангую, не залил БД
Помнится, мы тогда с тобой сделали вполне себе ничего роутер. Не MVC, конечно, но жить с ним было можно. А ты опять тот же вопрос задаёшь --- Добавлено --- https://php.ru/forum/threads/kak-sd...eratora-switch-v-php.63095/page-2#post-513647 Весьма душевный вариант
@mkramer вот зачем спалил контору я упомянул выше, что уже была такая тема) может он и нормальный, но у меня проблемы с единым входом) для всех скриптов смотря за что они отвечают)
@igordata ну как это все делается, вот например с логикой у меня туго, мне на пальцах показывать нужно, ну почти на пальцах Ладно к делу, есть у меня скрипт например сообщений, и для начала я создал несколько файлов будут отвечать за отправку ответ удаления сообщений. Ну вот сам роутер: PHP: <?php include ($_SERVER['DOCUMENT_ROOT'].'/system/config.routes.php');/*файл переключатель*/ error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки $go = isset($_GET["go"]) ? $_GET["go"]: false; if (!empty($go) && isset($routes[$go])) { include $routes[$go]; }else{ //дефолтное поведение header('Location: index.php');//кстати ругается мол заголовки уже были отправлены в этой строке. exit(); } ?> и вот я подключаю файлы сообщений так: PHP: <?php $routes = [ "send_msg" => "/system/modules/dialog/send_msg.php", /*написать сообщение скрипт*/ "send_f" => "/templates/default/messages/send_msg_form.php", /*написать сообщение форма*/ "all_msg" => "/system/modules/dialog/all_msg.php", /*все сообщения скрипт*/ "all_f" => "/templates/default/messages/all_msg_form.php", /*все сообщения форма*/ "delet_m" => "/system/modules/dialog/delet_msg.php";] /*удаления сообщений*/ ?> вот как бы видите я каждый файл в этот роутер пихаю, а я хочу например для сообщений сделать единый вход ну и для всех файлов так же. Объясните как это чудо все делается? ПРИМЕЧАНИЕ у меня логика выше крыши, мне нужно доступным методом объяснять.
Так это и есть единый вход, всё подаёшь на файл роутера, а он уже на основе конфига решает, какой файл выполнит реальную работу. В том или ином виде, единая точка входа делает именно это. Понятно, что лично я бы в реальном приложении так делать не стал, поскольку я активно использую классы, фреймворки, и я бы использовал либо роутер из фреймворка (микро-фреймворка), либо один из тысяч написанных классов роутеров совместно с механизмом автозагрузки классов. Но поскольку ты с классами на-вы, это для тебя лучшее пока решение. Ты пихаешь файлы не в роутер, а в конфиг, просто говоришь, как на этот параметр должна реагировать система. Дефолтное поведение у тебя - аут полный. Зачем там редирект?
@mkramer а я фиг его что инклудить нужно? PHP: $go = isset($_GET["go"]) ? $_GET["go"]: false; Как эту строчку переписать на if{} просто интересует.