Очередной 🍿
Про ВП вижу потроллить успели:D
Ответ, что ТЗ, исполнители, аудит (внедренные решения), грамотный договор (соответствие ТЗ, внедрение, гарантии, сопровождение) существенно снизят/улучшат/повысят надои, наверное тоже было. Если нет, в предыдущих сериях аналогичных дискуссий точно можно найти.
Тогда смысл битрикса?
-----------------
display:block;
А если "слово-слово слово-слово слово-слово-слово-слово", то граница слова ( \b) вероятно поможет
Если проверяется что то типа "слово-слово", последний пробельный символ мешает
Раньше помогало составной ключ на id, value. Ну и иннодб. Если оп есть, чтоб оно поместилось. Давно на монге, мускул стал забывать.
Там тоже через гадалку, если запаса оп нет. На 1 млн по "_id" на хдд, после systemctl restart mongod в зависимости от (ну, начнем с load average) вполне может от 1 до 5сек. На прогретом и 200 микросек м/б. Все зависит от наличия оп, ну и
wiredTiger: engineConfig: cacheSizeGB:
Были попытки соскочить, но гибкости нужной не всегда получается с роутингом из бд. Вручную описанные роуты эффективней в плане приоритетов времени и места выполнения. На примере распределения ролей - документ должен быть доступен только
'role' => ['master', 'admin']
Или другой, более показательный пример
'content-type' => 'application/json', 'allowed' => 'POST', 'nologin' => 1
В общем, гораздо проще разрулить все это роутингом похожим на традиционный. На самом раннем этапе, чтобы лишних телодвижений не делать:)
Там фантазия только нужна, например имеем урлы
/sec1/sec2/sec3
/sec1/sec2/sec4
/sec1/sec5/sec6
, в /sec1/sec2 определен другой шаблон для документа, а в /sec1 слайдер(баннер/еще там чего), с флагом наследовать. И все документы по цепочке урла имеющие их парентом, автоматически получают все это. Соответственно, если не имеют свои значения для этих параметров.
Так что, на мой взгляд, есть как плюсы. Очевидные, что бы использовать это. Но и минусы, тоже есть. Как и у любой вещи.
Вы с точки зрения программера. Попробуйте, чтобы без обращения к вам, чтобы часть категорий была доступна вместо katalog-tovarov/tablet/... по адресу samsung/tablet/..., другая tablet/cases/..., при том, что в любой момент может появится еще-какой-нибудь/tablet после обновления каталога. Или будет заведена новая категория аксессуаров, где нет брендов. Потом, если получится, посчитайте +/-
Единственно, что напрашивается, если клиента побреете, что сначала бренд и ни как иначе.
url(r'^(?P<vendor>[-\w]+)
Что само по себе, напрягает
А если, еще и статья нужна с урлом /samsung/почему-самсунг-лучше-айфона, а по урлу /samsung/полезное, листинг анонсов статей, которых 100500.
Поэтому, считаю, такого плана роутинг не лучшее решение, тут и программер скажет, ну его, анриал
----
Иными словами - изменения в базе, легко меняют любой урл, начиная с первой секции.
Не претендую, но. У меня вообще никакой маски нет. Правила простые. Сначала предопределенные роуты.
'routes' => [ 'index' => [ 'controller' => 'Cms\\Controller\\SiteIndex', 'content-type' => 'text/html', 'allowed' => 'GET', 'tpl' => [ 'type' => 'twig', 'area' => _TWIGTPL .'/default.tpl', 'template' => '/main.twig' ], ], 'search' => [ 'controller' => 'Cms\\Controller\\Search', 'content-type' => 'application/json', 'allowed' => 'GET,POST', 'nologin' => 1 ], 'usr' => [ 'controller' => 'Cms\\Controller\\Usr', 'content-type' => 'text/html', 'tpl' => [ 'type' => 'twig', 'area' => _TWIGTPL .'/default.tpl', 'template' => '/usr.twig' ], 'logined' => true, ],
Казалось бы, достаточно на все случаи, если есть программер под рукой. Но, гибкости хотелось, и меньше зависеть от админов сайтов. Поэтому:
'default_route' => [ 'controller' => 'Fwe\\Controllers\\Dflt', 'content-type' => 'text/html', 'allowed' => 'GET', 'tpl' => [ 'type' => 'twig', 'area' => _TWIGTPL .'/default.tpl', 'template' => '/page.twig' ], ],
^[0-9a-z\_\-]{1,127}\.?[a-z0-9]{0,6}$
Примерно такие таблички (DВ данном случает Sqlite, но не важно)
CREATE TABLE "map" ( "_id" TEXT NOT NULL UNIQUE, "section" TEXT, "link" TEXT UNIQUE, "name" TEXT NOT NULL, "parent" TEXT DEFAULT '', "is_view" INTEGER DEFAULT 0, "is_hit" INTEGER DEFAULT 0, "order" INTEGER DEFAULT 10000, "img" TEXT DEFAULT '', "colls" TEXT DEFAULT '', "plug" TEXT, "up" INTEGER DEFAULT 0, PRIMARY KEY("_id") ) CREATE INDEX "section_link_name" ON "map" ( "section", "link", "name" )
В общем то, такой подход позволяет обработать любой динамический урл заданный админом сайта в админке. Таблица map это просто карта разделов сайта, каждый из которых может иметь набор статей и коллекций colls (категория каталога товаров или др. объект). Иными словами, по урлу /articles/my-first-article, в табличке мап будет только articles, а my-first-article попытаемся найти в другой, при условии, что articles в мап есть. Аналогично с коллекциями. Это накладывает некоторые лишние действия при изменении урла в мап, но все решаемо. Профит, главным образом в том, что админ сайта не парит мне мозг, когда ему надо какой то свой урл сделать вместо /catalog/samosvaly/kamaz-65115, а легко делает /avto/gruzovye/samosval/kamaz-65115. Ну или просто /kamaz-65115, если коллекция самосвалы приписана к морде.
Не поленюсь, несколько строк на коленке накидать:
$sql = 'SELECT count("_id") FROM "map";'; prnt(Core::dbsq('site.db')->q($sql, null)->R(),1); prnt(Core::dbsq('site.db')->rows(),1); prnt(Core::dbsq('site.db')->q( 'SELECT * FROM "map" WHERE "section"=:section ;', [ [':section'=>'company'], [':section'=>'faq'] ])->R(),1); prnt(Core::dbsq('site.db')->rows()); die;
Array ( [sql] => SELECT count("_id") FROM "map"; [sqltype] => select [sqlnum] => 3 [rows] => 1 [changes] => 0 [allrows] => 1 [eCode] => 0 [error] => [time] => 0.12(ms) [affected_rows] => 0 ) Array ( [0] => Array ( [count("_id")] => 363 ) ) Array ( [sql] => SELECT * FROM "map" WHERE "section"=:section ; [sqltype] => select [sqlnum] => 4 [rows] => 12 [changes] => 0 [allrows] => 12 [transaction] => 1 [eCode] => 0 [error] => [time] => 0.24(ms) [affected_rows] => 0 )
Таких разделов сайта не будет слишком много, в данном случае 363 и за 0.24(ms) легко получить 12 разделов 1 секцией имеющих
[':section'=>'company'], [':section'=>'faq']
Т.е. имеем все доступные документы /company/about, /company/contacts, /company/.... Если среди них есть, с текущим урлом, то продолжаем дальше, если нет 404. Всякие бредкрумбы уже готовы.
+100. Все что надо для вэб разработки под рукой. Когда то, давно, еще в начале 0-х предавал линукс в пользу винды. В свою защиту имею сказать, тогда бледно все было - браузер конкуерор, гимп, который в куче окон открывался и т.д.. Сейчас красота. Игр нет, но я и не любитель.
Нгинкс+пхп-фпм 500, В других случаях, особенно, с учетом
, не факт. Вполне может и 200;)