За последние 24 часа нас посетили 17309 программистов и 1722 робота. Сейчас ищут 1640 программистов ...

Переключатель для сайта, логичный и понятный php

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 11 июл 2017.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Доброго времени суток знатаки php и других языков, хочу продумать для себя новый переключатель так как мне кажется что у меня логика выше крыши улетела, и в данный момент мой переключатель не есть отличным. Вот сейчас у меня с нуля, вход, регистрация, страница юзеров без понтов чисто вывод инфы, добавления в друзья, сообщения но еще не доделал их чисто написать сообщения пока что можно( еще парится долго) я же начинающий и только что новое вижу стразу применяю либо если читаю или узнаю удаляю редактирую, все.
    Вот как вы считаете как сделать такой переключатель как например в любой соц сети типа:
    NEWS
    REGISTER
    MESSAGES
    FRIENDS
    EXIT

    типа нажал на register перехожу к регистрации нажал на messages перехожу в сообщения, но тут конечно если юзер авторизовался, ну и так далее. Как такое сотворить можно, мне когда то помогали с переключателем, но то было уже давно когда только прям вообще толку не чего не знал.
    Жду положительных ваших предложений.
     
    #1 _ne_scaju_, 11 июл 2017
    Последнее редактирование: 11 июл 2017
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Это называется "навигация". Список ссылок на соотв. страницы. Все.
    Если ЧПУ используется - то разные ссылки, если без него, но с одной точкой входа, то ссылки с разными GET_параметрами.
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    а по подробней пожалуйста, на примерах и т.п.
    Думаю в мануале не написано.
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Ссылка знаешь что такое? А теперь представь что, их пачка. Вот тебе и "переключатель". Куда подробнее-то? :)
    У тебя эти страницы, с новостями, с регой, с друзяшками, существуют? Как ты на них попадаешь?
     
    SamyRed нравится это.
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    --- Добавлено ---
    Удалите бота! :D
    --- Добавлено ---
    вау, надажи, ссылки! прост чума
    это перевернёт интернет!
     
    SamyRed нравится это.
  6. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    Да эти страницы существуют, попадаю на них по разному, например get.
    Это массив из ссылок что ли должен быть?
    --- Добавлено ---
    @igordata
    И что дальше?
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понятно вообще, что ты пишешь и в чем вопрос
    ну ссылки
    ну это ссылки
    и что?
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Такое чувство, что ты представлял навигационное меню как нечто сложное, и сейчас, когда тебе говорят, что "ну тупо ссылки в кучу собери и CSS натяни, шоб бохато было", у тебя когнитивный диссонанс, типа "и все?".

    Да, и все.

    Просто ссылки.
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    https://github.com/MouseZver/Mouse_Project

    после ЧПУ идет роутинг где и я остановился. Это пи.. дамы и господа.
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    Лан вопрос звучит так, как сделать такой переключатель, то-есть чтобы каждая ссылка имела имела единую точку входа, у меня есть переключатель могу показать, но я считаю что он не правильный, так как я подключаю в нем все свои файлы, и получается для каждого файла есть свой вход.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты хочешь намутить свой роутер?
    на каком движке у тебя сайт?
    --- Добавлено ---
    в чем беда?
    --- Добавлено ---
    @MouseZver
    PHP:
    1. Engine::_( 'STARTING', explode ( '/', mb_strtolower ( trim ( parse_url ( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), ' /' ), 'UTF-8' ) ?: Engine::$RAY['RAY']['START_DEFAULT_INDEX'] ) );
    PHP:
    1. echo Engine::_( 'TRIGGER', $OB );
    че эта?
    --- Добавлено ---
    ты ашалел методы через юзерфунк дёргать? :D
    --- Добавлено ---
    пипец

    давай заново ООП осмысляй и про интерфейсы и наследование почитай
    --- Добавлено ---
    :D но за попытку пять баллов, чо
     
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    самопис без движка! :D
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    роутер значит хочешь изобрести?

    опиши сначала своими словами, как оно должно по-твоему работать
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @MouseZver
    это пример, или что ты мне хотел показать? открыл файлы некоторые и в них мне текстовый редактор, выдал ошибку в некоторых файлах, например в авторизации.
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    1) Есть точка входа - index.php в корне сайта.
    2) Есть GET-параметр page.
    3) Для каждой страницы он свой должен быть. Хоть номер, хоть надпись. Все равно никто, кроме самих веб-разработчиков не читает URL-ы.
    4) В index.php пишешь switch по $_GET['page']. Для каждой известной страницы отдаешь страницу. Хоть инклудом ее прям тут на месте цепляй, я не знаю же, какая у тебя архитектура. Все неизвестные валятся в секцию default.
    5) В секции default отдаешь 404й заголовок. Или переадресацию на главную страницу.

    Вот ты и написал простой как лом, но настолько же надежный роутер. Только не забудь перед ним написать что-то типа
    PHP:
    1. $_GET['page'] = $_GET['page'] ?? '';
    В итоге адрес /index.php?page=friends будет вести на страничку с друзяшками.
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    Буду за ноутом покажу как я с помощью пользователей этого форума делал переключатель. Да я предлогал при помощи switch() сделать, но мне сказали что так будет лучшие и меньше писанины, но не говорили что это не правильно использовать switch(){} так что с ним я тоже буду пробовать сделать.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    есть $_SERVER['REQUEST_URI'] и збз, гет не нужен тут
    --- Добавлено ---
    свич быстро заёбывает просто. поэтому я сделал другую схему.
     
  18. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    Знания.
    20 и более вариантов загружены в голове и все помечены "говнокод".
    К концу дня пока написал легкий код.
    PHP:
    1. $a = [ 'panel', 'gg', 1 ];
    2.  
    3. $b = [
    4.     'panel',
    5.     'panel/?/access',
    6.     'panel/?/option',
    7. ];
    8.  
    9. $z = [];
    10.  
    11. foreach ( $b as $regex )
    12. {
    13.     $EXP = explode ( '/', $regex );
    14.    
    15.     $map = array_map ( function ( $K, $P ) use ( $a )
    16.     {
    17.         switch ( $P )
    18.         {
    19.             case '?':
    20.                 return $a[$K] ?? NULL;
    21.             break;
    22.            
    23.             case ':ID':
    24.                 return is_numeric ( $a[$K] ) ? $a[$K] : NULL;
    25.             default:
    26.                 return $P;
    27.         }
    28.  
    29.     }, array_keys ( $EXP ), $EXP );
    30.    
    31.     if ( $a == $map )
    32.     {
    33.         var_export ($a);
    34.         echo '<br>';
    35.         var_export ($map);
    36.        
    37.         break;
    38.     }
    39. }
    АГА. не любитель стрелок. Пока в том месте помечу говнокод.
    Со временем.
    я их никогда не понимал кроме как основа правил методов, не к чему применять.
    С этим все гуд.
    --- Добавлено ---
    да это пример, где нету паутины в классах за классом.
    Там и докопаться не далеко до URI.
    Про ошибку не понял. Вангую, не залил БД
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Помнится, мы тогда с тобой сделали вполне себе ничего роутер. Не MVC, конечно, но жить с ним было можно. А ты опять тот же вопрос задаёшь
    --- Добавлено ---
    https://php.ru/forum/threads/kak-sd...eratora-switch-v-php.63095/page-2#post-513647
    Весьма душевный вариант :)
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @MouseZver
    отдельную тему создай
     
  21. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    вот зачем спалил контору :D
    я упомянул выше, что уже была такая тема) может он и нормальный, но у меня проблемы с единым входом) для всех скриптов смотря за что они отвечают)
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    какие именно проблемы?
     
  23. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @igordata
    ну как это все делается, вот например с логикой у меня туго, мне на пальцах показывать нужно, ну почти на пальцах :D
    Ладно к делу, есть у меня скрипт например сообщений, и для начала я создал несколько файлов будут отвечать за отправку ответ удаления сообщений. Ну вот сам роутер:
    PHP:
    1. <?php
    2.  
    3. include ($_SERVER['DOCUMENT_ROOT'].'/system/config.routes.php');/*файл переключатель*/
    4. error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки
    5.  
    6. $go = isset($_GET["go"]) ? $_GET["go"]: false;
    7. if (!empty($go)  && isset($routes[$go])) {
    8. include $routes[$go];
    9. }else{
    10. //дефолтное поведение
    11. header('Location: index.php');//кстати ругается мол заголовки уже были отправлены в этой строке.
    12. exit();
    13. }
    14.  
    15. ?>
    и вот я подключаю файлы сообщений так:
    PHP:
    1. <?php
    2. $routes = [
    3. "send_msg" => "/system/modules/dialog/send_msg.php", /*написать сообщение скрипт*/
    4. "send_f" => "/templates/default/messages/send_msg_form.php", /*написать сообщение форма*/
    5. "all_msg" => "/system/modules/dialog/all_msg.php", /*все сообщения скрипт*/
    6. "all_f" => "/templates/default/messages/all_msg_form.php", /*все сообщения форма*/
    7. "delet_m" => "/system/modules/dialog/delet_msg.php";] /*удаления сообщений*/
    8. ?>
    вот как бы видите я каждый файл в этот роутер пихаю, а я хочу например для сообщений сделать единый вход ну и для всех файлов так же. Объясните как это чудо все делается? ПРИМЕЧАНИЕ у меня логика выше крыши, мне нужно доступным методом объяснять.
     
  24. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Так это и есть единый вход, всё подаёшь на файл роутера, а он уже на основе конфига решает, какой файл выполнит реальную работу. В том или ином виде, единая точка входа делает именно это. Понятно, что лично я бы в реальном приложении так делать не стал, поскольку я активно использую классы, фреймворки, и я бы использовал либо роутер из фреймворка (микро-фреймворка), либо один из тысяч написанных классов роутеров совместно с механизмом автозагрузки классов. Но поскольку ты с классами на-вы, это для тебя лучшее пока решение.

    Ты пихаешь файлы не в роутер, а в конфиг, просто говоришь, как на этот параметр должна реагировать система.

    Дефолтное поведение у тебя - аут полный. Зачем там редирект?
     
    #24 mkramer, 12 июл 2017
    Последнее редактирование: 12 июл 2017
  25. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    а я фиг его что инклудить нужно?
    PHP:
    1. $go = isset($_GET["go"]) ? $_GET["go"]: false;
    Как эту строчку переписать на if{} просто интересует.
     
    #25 _ne_scaju_, 12 июл 2017
    Последнее редактирование: 12 июл 2017