1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - новый и перспективный форумный движок от бывших создателей vBulletin.

Для чего используются majorSection и minorSection?

Тема в разделе "Статьи по XenForo Framework", создана пользователем RouR, 27 янв 2014.

Загрузка
  1. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    majorSection minorSection для чего используются? не могу разобраться
     
  2. akinak

    akinak Местный

    Регистрация:
    12.02.13
    Сообщения:
    259
    Симпатии:
    241
    Версия XF:
    1.1.3
    /**
    * The major section of the page being routed to. This is used as a navigation aid;
    * for example, to show the right tab and child sections.
    *
    * @var string
    */
    protected $_majorSection = '';

    /**
    * The minor section of the page being routed to. This can, for example, allow the
    * current section within a tab to be displayed as if it's selected.
    *
    * @var string
    */
    protected $_minorSection = '';

    Используется для навигации внутри какого-нить контейнера.

    Например, если открыть профиль пользователя.
    http://www.xf-russia.ru/forum/members/akinak.7229/
    И поклацать там внутри,
    http://www.xf-russia.ru/forum/members/akinak.7229/#recentActivity
     
  3. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    спасибо, но нужен наглядный пример. больше конкретики как и где это использовать.
     
  4. akinak

    akinak Местный

    Регистрация:
    12.02.13
    Сообщения:
    259
    Симпатии:
    241
    Версия XF:
    1.1.3
    Вы как то не правильно ставите вопрос.
    Обычно есть задача и есть способы её решить. А вы говорите - есть такой способ, скажите где я могу его использовать? Я ж не знаю, где вам это может понадобится :)

    Впрочем, я и привел наглядный пример.
    Профиль пользователя находится по одному урлу, внутри есть 4 ссылки, по нажатию на которые идет обращение к контролеру, загрузка данных, отображение этих данных. При этом урл страницы не меняется, окружение не перезагружается. Если вам нужно будет реализовать подобное в вашем дополнение, то понадобятся секции (хотя не обязательно, можно и по другому будет реализовать).
     
    Mirovinger нравится это.
  5. So1omon

    So1omon Read only

    Регистрация:
    12.12.12
    Сообщения:
    69
    Симпатии:
    4
    Версия XF:
    1.1.1
    а что это вообще? :confused:
     
  6. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    Если в браузере открывать страницы /index.php?members/admin.1/#info /index.php?members/admin.1/#postings то в обоих случаях вызывается actionMember() (можете проверить отладчиком)
    Далее генерируется 'member_view' т отдаётся пользователю. А вот там уже в хтмл разметке есть data-loadurl="index.php?members/admin.1/recent-activity" и по щелку мыши ajax-запрос улетает на actionRecentActivity()

    Собственно два вопроса:
    1. majorSection minorSection как перенапраляют на actionRecentActivity и почему только для ajax?
    2. сама задача - на обычные GET-запросы /index.php?members/admin.1/#info /index.php?members/admin.1/#postings вызывать разные actionInfo, actionPosting (ну или в крайнем случае внутри action ловить значение переменной info/posting)
     
    Последнее редактирование: 18 фев 2014
  7. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1.921
    Симпатии:
    1.160
    Версия XF:
    1.0.4
    Вы немного смешиваете логику работы фронтэнда (верстка + js) и работу бекэнда.
    И странно но похоже не понимаете как работает браузер и http протокол (хотя я надеюсь что ошибаюсь).

    Теперь по порядку.
    Хеш, это якорь на странице, который браузер никогда не передает на бекэнд, т.е. ссылки /index.php?members/admin.1/#info и /index.php?members/admin.1/#postings полностью идентичны для сервера и следовательно вызывается экшн для /index.php?members/admin.1/ а именно actionMember(), тут не надо и отладчиком смотреть - по другому просто не может быть (такая спецификация). А внутренний роутинг в данном конкретном случае никак не зависит от минорной или мажорной секции.

    Теперь что происходит на стороне клиента, т.е. в браузере:
    В js-ксена есть функционал вкладок, который может как отображать уже заранее отрендереную вкладку а может подгружать ее ajax-ом, откуда грузить как раз задается через дата-атрибут data-loadurl. В данном случае это index.php?members/admin.1/recent-activity и логично что для такого урл-а вызывается actionRecentActivity().
    Теперь ответ на этот вопрос. Сделать можно, но нужно или нет - решать Вам, но я бы не рекомендовал, т.к. лишняя нагрузка на сервер.
    Т.к. запрос на сервер всегда идет один и тот же, т.е. для сервера /index.php?members/admin.1/#info и /index.php?members/admin.1/#postings абсолютно идентичны, то единственный вариант, после отображения страницы через js - определять какой хеш у страницы и активировать нужную вкладку, которая при необходимости подгрузит ajax-ом нужный контент. Т.е. при одном открытии страницы автоматом делается 2 запроса на сервер (сам профиль не самая легкая страница, но и в зависимости от активной вкладки запрос тоже может не легкий).
    По другому никак если надо оставить именно такие урл-ы.

    Как вариант написать собственный хак, который будет дублировать функционал страницы пользователя, но по другим урл-ам, но это будет мрак в плане сео. Да и поддерживать его будет довольно таки мрачновато, т.к. тупой копипаст и надо будет копипастить при каждом серьезном обновлении форума.
     
  8. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    пока что сделал в виде /index.php?members/admin.1/&page=postings. но вообще думаю как по уму сделать. Сейчас majorSection не использую, вот думал что поможет этот механизм. Поэтому и спрашиваю как вообще им правильнее пользоваться? с т.з. архитектуры ксена
     
  9. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1.921
    Симпатии:
    1.160
    Версия XF:
    1.0.4
    Ну все что можно сделать я написал выше и это не имеет отношения к архитектуре ксена :)
    Если насчет minor и major секций то в 99% случаев на них можно забить, а при написании собственных хаков проверять их может понадобиться в очень редких случаях, например внутрение контроллер-рероуты, чтобы узнать откуда именно пришел запрос на конкретный action-метод. И в описанной выше задаче они точно не нужны
     
  10. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    ок, спасиб
    --- добавлено : 18 фев 2014 в 19:47 ---
    хотя нет. один вопрос остался - index.php?members/admin.1/recent-activity почему вызывает actionRecentActivity а не actionMember()?
     
    Последнее редактирование модератором: 26 фев 2014
  11. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1.921
    Симпатии:
    1.160
    Версия XF:
    1.0.4
    А почему решили что он должен вызывать actionMember?
    Запрос members/admin.1/recent-activity,
    для префикса members отрабатывает роут-префикс класс XenForo_Route_Prefix_Members, который в свою очередь передает во фронт контроллер публичный контроллер XenForo_ControllerPublic_Member и остаток что остался после разбора урл-а в качестве action-a, и это recent-activity. Следовательно запустится XenForo_ControllerPublic_Member::actionRecentActivity
     

Поделиться этой страницей