А что насчет нормального ЧПУ? (есть проблемы)
Re: А что насчет нормального ЧПУ?
Ответил в комментарии снова. Как раз одно правило на весь сайт.
Re: А что насчет нормального ЧПУ?
Капитан, я про то и спрашивал - как бы с помощью своего правила это и можно было бы сделать.yan писал(а):выше уже дали ссылку http://alu5.sgxi1v6hzn3zo6e.qjtv.e/doc/ ... .url#sec-9 - делаем свое правило и как угодно разруливаем
"Как угодно" разрулить с помощью своего волшебного правила не получается. Если бы ты попробовал прочитать и подумать хоть чуть чуть о чем я выше писал, то не нес бы глупости, уверовавший(а не разобравшийся в сути данного механизма) что свое правило спасет от всех бед.
Re: А что насчет нормального ЧПУ?
Я говорю о том, что не могу узнать и сопоставить название параметра, а вы мне советуете его переименовать....ElisDN писал(а):Ответил в комментарии снова. Как раз одно правило на весь сайт.
Давайте я стану самым ГЛАВНЫМ и дам всем указание , про то какие имена и в каком порядке использовать. И проблема будет решена.
Итак ВСЕМ, ВСЕМ, ВСЕМ, в аргументах action действий, можно использовать только имена параметров - $one, $two, $three,... Все расширения, все модули, все что кидается на package.org, все должны подчиняться этому правилу.
Re: А что насчет нормального ЧПУ?
Ответил вам про рефлексию и сериализацию http://www.elisdn.ru/blog/48/routing-in ... urlmanagerTommi писал(а):Я говорю о том, что не могу узнать и сопоставить название параметра...
Итак ВСЕМ, ВСЕМ, ВСЕМ, в аргументах action действий, можно использовать только имена параметров - $one, $two, $three,...
Re: А что насчет нормального ЧПУ?
Я уже видел. Но это не решение, там я ответил почему.
Re: А что насчет нормального ЧПУ?
Хорошо что хоть один человек все таки понял в чем проблема.
Продублирую user-case, чтобы предупредить других, что есть такая проблема. А то мужики то и не знают.
Тут все из-за того что роут состоит только из [модуля/]контроллера/действия.
Странно, что никто этого раньше не замечал.
Все наверное наивно надеялись на магию иероглифического письма для настройки UrlManager. А магия там не особо помогающая.
Даже вон по примеру из блога ElisDN про создание своего правила PageUrlRule очевидна эта проблема:
Если такое управление адресом ОТ КОРНЯ будет требоваться для разных роутов то придется создавать свои правила типа - PageUrlRule - NewsUrlRule , UsersUrlRule и т.д.
И если эти УРЛ правила будут искать , как у вас сделано, каждый в своей таблице, то не факт же что первое правило найдет соответствие. Станет работать второе, третье...
А это все множество излишних запросов к базе. Что непозволительно.
Выход один - одна таблица для синонимов для всего сайта.
Распарсить запрос становиться легко и просто - всего один запрос к базе.
А для создания ссылок уже и приходим к моей проблеме.
Продублирую user-case, чтобы предупредить других, что есть такая проблема. А то мужики то и не знают.
Тут все из-за того что роут состоит только из [модуля/]контроллера/действия.
Странно, что никто этого раньше не замечал.
Все наверное наивно надеялись на магию иероглифического письма для настройки UrlManager. А магия там не особо помогающая.
Даже вон по примеру из блога ElisDN про создание своего правила PageUrlRule очевидна эта проблема:
Если такое управление адресом ОТ КОРНЯ будет требоваться для разных роутов то придется создавать свои правила типа - PageUrlRule - NewsUrlRule , UsersUrlRule и т.д.
И если эти УРЛ правила будут искать , как у вас сделано, каждый в своей таблице, то не факт же что первое правило найдет соответствие. Станет работать второе, третье...
А это все множество излишних запросов к базе. Что непозволительно.
Выход один - одна таблица для синонимов для всего сайта.
Распарсить запрос становиться легко и просто - всего один запрос к базе.
А для создания ссылок уже и приходим к моей проблеме.
Re: А что насчет нормального ЧПУ?
Я думаю чтоб все было по честному, вам нужно опубликовать здесь ваши мысли касательно решения данной проблемы. Не нужно приводить демо коды и все такое, просто опишите логику которая позволило бы сделать роутинги идельными.
На текущий момент как решение данной проблемы, с учетом того что есть, может быть кэширование выборки роутов, или дополнительная переменная и её кэширование в своём классе с правилами маршутизации.
Описание логики:
- Для всех роутов используется одна таблица. В ней есть ЧПУ путь, и програмный путь. (Дополнительные поля по желанию.)
- В момент парса роута, делается один запрос в базу, как вы выше заметили. (Тут проблем нет.)
- Создания роута заключается примерно в следующем:
а) В нашей моедли которая управляет таблицей роутов, создается статический метод, который выбирает все записи и кешируют их если кэш пустой. (Кэш нужно всегда сбрасывать в момент обновления\создания нового роута)
б) В момент создания роута используется кэш модели что мы реализовали выше, что позволит избавится от лишних запросов вообще, если есть кэш, или обойтись одним запросом когда мы его впервые заполняем.
в) Если не хочется привязыватся к методу модели, можно в своём классе маршрутизации добавить приватный атрибут, и в момент вызова первой функции создания урла, заполнять атрибут доступными правилами, таким образом сократить количество запросов к БД до 1 в случае отказа от кэша.
На текущий момент как решение данной проблемы, с учетом того что есть, может быть кэширование выборки роутов, или дополнительная переменная и её кэширование в своём классе с правилами маршутизации.
Описание логики:
- Для всех роутов используется одна таблица. В ней есть ЧПУ путь, и програмный путь. (Дополнительные поля по желанию.)
- В момент парса роута, делается один запрос в базу, как вы выше заметили. (Тут проблем нет.)
- Создания роута заключается примерно в следующем:
а) В нашей моедли которая управляет таблицей роутов, создается статический метод, который выбирает все записи и кешируют их если кэш пустой. (Кэш нужно всегда сбрасывать в момент обновления\создания нового роута)
б) В момент создания роута используется кэш модели что мы реализовали выше, что позволит избавится от лишних запросов вообще, если есть кэш, или обойтись одним запросом когда мы его впервые заполняем.
в) Если не хочется привязыватся к методу модели, можно в своём классе маршрутизации добавить приватный атрибут, и в момент вызова первой функции создания урла, заполнять атрибут доступными правилами, таким образом сократить количество запросов к БД до 1 в случае отказа от кэша.
Re: А что насчет нормального ЧПУ?
Нет проблем. Хочу тоже чтобы все было по честному.vova07 писал(а):Я думаю чтоб все было по честному, вам нужно опубликовать здесь ваши мысли касательно решения данной проблемы. Не нужно приводить демо коды и все такое, просто опишите логику которая позволило бы сделать роутинги идельными.
Примерный план действий.
1) Отменить понятие Контроллер по умолчанию
2) Отменить понятие Действие по умолчанию
2.5) Для Главной страницы (это когда роут в пути пустой), роут берется из Конфига
3) Ввести понятие Параметры
4) Роут становится такой:
?r=модуль/путь_к_контроллеру/действие/параметр1/параметр2/...
5) Действие будет объявляться так:
Код: Выделить всё
public function actionView($arg1, $arg2 = 'default', $page = 0)
{
// $arg1 == параметр1
}
- будет знать абсолютно ТОЧНО(!!!!!!) где начинаются параметры и выпарсит их в массив $ARG = [1 => параметр1, 2 => параметр2,... ]
- при биндинге данных в параметры действия:
- те, параметры, которые именуются по шаблону '/arg\d/' ядро фреймворка наполнит из массива $ARG.
- для остальных, как и сейчас , из $_GET
- значения по умолчанию без изменений
- дальше без изменений
7) Создание URL:
Код: Выделить всё
/*
Контроллер - museums
Действие - view
*/
$this->createUrl('museums/view/1/best');
$this->createUrl('museums/view/1/all', ['page' => 1] );
( при нечистых ссылках из ($_GET['r'] == 'museums/view/1/best')
И смогу вообще по всему сайту оперировать с понятием Страница сайта.
Виджет показать только на определенной странице сайта? На 'museums/view/1/best'? Да, пожалуйста, вот мы на ней.
Последний раз редактировалось Tommi 2013.12.13, 08:54, всего редактировалось 1 раз.
Re: А что насчет нормального ЧПУ? (есть проблемы)
Если честно не могу понять чем отличается логика описаная выше, от того что есть сейчас. То что вы описали в пунтке 3, 4, и 5 уже есть в фрейме, и именно так и работает. (Кроме как то что вид параметров нужно через роуты прописывать чтобы получить такой вид).
Разбор и создание ссылок, вроде без проблем можно реализовать на том что есть.
Касательно понятия, страница сайта, это тоже реализуемо, не могу понять в чем проблема. А вывод виджета, на определенной странице, дело техники.
Я сегодня как раз начал делать так называемый модуль "структуры сайта", для одного маленького проекта на Yii 2. Хочу заметить что за счёт одной таблицы с ЧПУ ссылками, своего класса роутов и одного запроса в базу, можно спарсить, и создать все ссылки для запрашиваемой странице. Это один запрос который в случае необходимости можно и закэшировать, но который позволяет реализовать все то что вам нужно. Или я что-то не понимаю в данной ситуации?
Разбор и создание ссылок, вроде без проблем можно реализовать на том что есть.
Касательно понятия, страница сайта, это тоже реализуемо, не могу понять в чем проблема. А вывод виджета, на определенной странице, дело техники.
Я сегодня как раз начал делать так называемый модуль "структуры сайта", для одного маленького проекта на Yii 2. Хочу заметить что за счёт одной таблицы с ЧПУ ссылками, своего класса роутов и одного запроса в базу, можно спарсить, и создать все ссылки для запрашиваемой странице. Это один запрос который в случае необходимости можно и закэшировать, но который позволяет реализовать все то что вам нужно. Или я что-то не понимаю в данной ситуации?
Re: А что насчет нормального ЧПУ? (есть проблемы)
создается впечатление, что уважаемый Tommi просто не разобрался еще в yii
- mihail_dev
- Сообщения: 243
- Зарегистрирован: 2013.07.17, 00:51
- Откуда: Молдова
- Контактная информация:
Re: А что насчет нормального ЧПУ? (есть проблемы)
Tommi,
а из этой записи $this->createUrl('museums/view/1/all', ['page' => 1] ); разве как то известно к какому контроллеру/действию будет обрашение и с какими параметрами
просто если работает 1 разработчик то конечно возможно он это и поймёт но если несколько то другой разраб просто к гадалке должен будет ходить вам не кажется?
а из этой записи $this->createUrl('museums/view/1/all', ['page' => 1] ); разве как то известно к какому контроллеру/действию будет обрашение и с какими параметрами
просто если работает 1 разработчик то конечно возможно он это и поймёт но если несколько то другой разраб просто к гадалке должен будет ходить вам не кажется?
Re: А что насчет нормального ЧПУ? (есть проблемы)
mihail_dev, если пункты 1 и 2 моего плана будут учтены, то по началу роута будет точно известно где обрабатывается запрос. Да и то, в реальности параметры то цифры в основном, так что не вижу проблемы по сравнению с существующим.
Да ладно, все равно все это безнадежно...
Из системы спроектированной запускаться с ручника, не слепить автоматизированную CMS.
И это только одна нестыковка, есть и другие, смысла о них тут говорить думаю тоже нет.
Теперь мне хоть понятна причина почему на yii1 не было создано ни одной стоящей CMS. Ручники не позволят создать систему, адекватную к современным требованиям пользователя такой цмс.
Да ладно, все равно все это безнадежно...
Из системы спроектированной запускаться с ручника, не слепить автоматизированную CMS.
И это только одна нестыковка, есть и другие, смысла о них тут говорить думаю тоже нет.
Теперь мне хоть понятна причина почему на yii1 не было создано ни одной стоящей CMS. Ручники не позволят создать систему, адекватную к современным требованиям пользователя такой цмс.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: А что насчет нормального ЧПУ? (есть проблемы)
Вообще много CMS было создано. Просто чтобы достичь популярности того же Drupal нужно очень много времени. А так чем, например, http://buildwithcraft.com плох?
Нравится Yii? Давайте сделаем его лучше!.
- flashimage
- Сообщения: 1517
- Зарегистрирован: 2011.01.23, 12:43
Re: А что насчет нормального ЧПУ? (есть проблемы)
Да, прям беда...))Tommi писал(а):Да ладно, все равно все это безнадежно...
Из системы спроектированной запускаться с ручника, не слепить автоматизированную CMS.
Готовых решений море, поклонитесь гуглу и получите озарение
http://www.yiiframework.com/extension/dburlmanager/
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
- mihail_dev
- Сообщения: 243
- Зарегистрирован: 2013.07.17, 00:51
- Откуда: Молдова
- Контактная информация:
Re: А что насчет нормального ЧПУ? (есть проблемы)
Потому что yii подразумевает чёткое приложение а не универсальный проект. Хотя есть возможность написать цмс (сам писал понял что не стоит, легче работать с частями проекта каждый раз собирая приложение), но если надо чем не устраивает http://yupe.ru/Tommi писал(а): Теперь мне хоть понятна причина почему на yii1 не было создано ни одной стоящей CMS. Ручники не позволят создать систему, адекватную к современным требованиям пользователя такой цмс.