Доброго времени суток, уважаемое сообщество!
Раз уж пошла такая байда, выложу инструкцию, как поменять URL по шаблону. То что нужно было, проверил. Вроде всё работает. Всё проверить один не сумею. Поэтому я выложу, а вы сами тестируйте, эксперементируйте на локалхосте. К тому же у сайтостроителей фантазия намного развитей, чему у меня . Потребности по замене url большие…
Для начала давайте уясним, не всё, что вы хотите можно решить… Любая ошибка приведет к странице 404. Поэтому, прежде чем проверять на рабочем сайте, проверяйте на локалхосте.
Итак, поехали. Для начала о микрохаке. Открываем файл ядра /core/cms.php. Находим метод detectURI(). В методе уже насколько я понял заложена замена по шаблону. Может и ошибаюсь. В общем, не смог я понять одну конструкцию. Что-то для меня новое. И погуглил, и думал. Так и не додумался. Это вот этот кусок кода
Вроде он не работает. Буду благодарен, если кто объяснит.
Я пошел другим путем ) Итак, начинаем изменения. Находим строку примерно 1563
меняем на
Чуть ниже, после строки 1567
вставляем
Вот и всё. Микрохак завершен. После данных действий вроде бы всё работает.
Далее, перейдем к самим шаблонам. Нужно создать файл custom_rewrite.php в корне сайта. А ещё лучше взять его из архива разработки и положить в корень сайта. Если устанавливали сам компонент и плагин, тогда этот файл у вас уже есть. Просто откройте в редакторе.
Далее приведу пару примеров, как строим правило в этом файле. Всё идет подобно файлу url_rewrite.php. Открываем и смотрим. Правило выглядит так:
Это мы меняем название компонента users на ludi. Много раз обсуждали, как это сделать. Вот ещё один метод.
Первый блок делаем редирект-301 на новый урл. Второй блок для нового урл делаем реврайт(подменяем на старый).
Как это работает, объяснять смысла нет. Кому нужно, тот поймет. Кто не понимает, ищем "регулярные выражения в php" и изучаем. Процесс будет нелегкий. Возможно даже лучше попросить того, кто знает. По секрету скажу, что даже кодеры делятся на тех, кто знает, и кто не знает. Я в числе тех, кто немного слышал про регулярки )))
Второй пример. Меняем "/stati/какая_то_категория/какая_то_статья" на "/stati/какая_то_категория-какая_то_статья". Кому-то нужно было так.
Будет меняться. Но надо будет иметь ввиду, что если кто-то создаст в категории /stati/ какую-то статью, то для этой страницы будет 404 ответ сервера. Вот так вот. Такая это тонкая материя.
В общем, я дал пример. А дальше уже сами. С регулярками у меня не всё гуд, да и времени в данный момент недостаточно, чтобы совершенствоваться. Наверно, лучше будет так. Кому что нужно(подробно что и на что менять) пишем в комментариях. Кто знает/может/есть желание анализируют и пишут правило под эту замену.
Инструкция не является истиной последней инстанции. А скорее просто старт для размышлений и решений. Поэтому буду очень благодарен, если и кодеры будут помогать пользователям с регулярками или подскажут что-то по улучшению.
Ах, да! В примерах http:// i19.ru нужно заменить на ваш сайт по подобию.
Приятного пользования!
Раз уж пошла такая байда, выложу инструкцию, как поменять URL по шаблону. То что нужно было, проверил. Вроде всё работает. Всё проверить один не сумею. Поэтому я выложу, а вы сами тестируйте, эксперементируйте на локалхосте. К тому же у сайтостроителей фантазия намного развитей, чему у меня . Потребности по замене url большие…
Для начала давайте уясним, не всё, что вы хотите можно решить… Любая ошибка приведет к странице 404. Поэтому, прежде чем проверять на рабочем сайте, проверяйте на локалхосте.
Итак, поехали. Для начала о микрохаке. Открываем файл ядра /core/cms.php. Находим метод detectURI(). В методе уже насколько я понял заложена замена по шаблону. Может и ошибаюсь. В общем, не смог я понять одну конструкцию. Что-то для меня новое. И погуглил, и думал. Так и не додумался. Это вот этот кусок кода
foreach($matches as $key=>$value){ if (!$key) { continue; } } }
Я пошел другим путем ) Итак, начинаем изменения. Находим строку примерно 1563
foreach($rules as $rule_id=>$rule) {
foreach($rules as $rule_id=>&$rule) {
Далее, перейдем к самим шаблонам. Нужно создать файл custom_rewrite.php в корне сайта. А ещё лучше взять его из архива разработки и положить в корень сайта. Если устанавливали сам компонент и плагин, тогда этот файл у вас уже есть. Просто откройте в редакторе.
Далее приведу пару примеров, как строим правило в этом файле. Всё идет подобно файлу url_rewrite.php. Открываем и смотрим. Правило выглядит так:
'source' => '/^users(.*?)$/is', 'target' => 'http://i19.ru/ludi$1', 'action' => 'redirect-301' ); 'source' => '/^ludi(.*?)$/is', 'target' => 'users$1', 'action' => 'rewrite' );
Первый блок делаем редирект-301 на новый урл. Второй блок для нового урл делаем реврайт(подменяем на старый).
Как это работает, объяснять смысла нет. Кому нужно, тот поймет. Кто не понимает, ищем "регулярные выражения в php" и изучаем. Процесс будет нелегкий. Возможно даже лучше попросить того, кто знает. По секрету скажу, что даже кодеры делятся на тех, кто знает, и кто не знает. Я в числе тех, кто немного слышал про регулярки )))
Второй пример. Меняем "/stati/какая_то_категория/какая_то_статья" на "/stati/какая_то_категория-какая_то_статья". Кому-то нужно было так.
'source' => '/^stati\/(.*?)\/(.*?)$/is', 'target' => 'http://i19.ru/stati/$1-$2', 'action' => 'redirect-301' ); 'source' => '/^stati\/(.*?)-(.*?)$/is', 'target' => 'stati/$1/$2', 'action' => 'rewrite' );
В общем, я дал пример. А дальше уже сами. С регулярками у меня не всё гуд, да и времени в данный момент недостаточно, чтобы совершенствоваться. Наверно, лучше будет так. Кому что нужно(подробно что и на что менять) пишем в комментариях. Кто знает/может/есть желание анализируют и пишут правило под эту замену.
Инструкция не является истиной последней инстанции. А скорее просто старт для размышлений и решений. Поэтому буду очень благодарен, если и кодеры будут помогать пользователям с регулярками или подскажут что-то по улучшению.
Ах, да! В примерах http:// i19.ru нужно заменить на ваш сайт по подобию.
Приятного пользования!
Реклама #
Марат 12 лет назад #
Positive 12 лет назад #
Bubble Gumoff 12 лет назад #
Александр 12 лет назад #
Gino Fernandes 12 лет назад #
Роман 12 лет назад #
Олег Васильевич я 12 лет назад #
Марат 12 лет назад #
googlebot 12 лет назад #
Марат 12 лет назад #
Проблемы возникают тогда, когда хотим менять ури по шаблону. Например, все ури /users/* на /ludi/* одним правилом. Ну или вообще что-то наподобие делать. Теоретически должно работать. В правилах используются регулярные выражения. В регулярках можно использовать карманы в функции замены. Но если написать в $target выражение $1 то совпадение с первого кармана не подставляется за место $1. А без этого замену по шаблону никак не сделать. Микрохак нужен только для этого.
Олег Васильевич я 12 лет назад #
Олег Васильевич я 12 лет назад #
Марат 12 лет назад #
Марат 12 лет назад #
letsgo 12 лет назад #
Олег Васильевич я 12 лет назад #
letsgo 12 лет назад #
Олег Васильевич я 12 лет назад #
letsgo 12 лет назад #
Есть ли смысл Олег Васильевич делать так stati/razdel/stati это зачастую от того, что не думают этот момент, прекрасно можно делать все раздела site.ru/razdel
Олег Васильевич я 12 лет назад #
Марат 12 лет назад #
Марат 12 лет назад #
Олег Васильевич я 12 лет назад #
Reborn 12 лет назад #
имею пару вопросов :
1.как сохранить эту вложенность site.ru/stati/categoria/statya.html >>> site.ru/stati/categoria-statya.html (уже имеем,спс) хотя если категория более чем из одного слова,то не работает.
2.и добавить site.ru/stati/category1/category2/statya.html >>> site.ru/stati/category1-category2-statya.html
перепробовал варианты,не выходит (
Reborn 12 лет назад #
Reborn 12 лет назад #
При наведении на ссылку адрес один,а при переходе-другой,тот, что нужен уже.Как к этому отнесутся поисковики ?
В системе есть плагин http://prntscr.com/e6u52 Пример плагина - для роутера /users/get_demo.html
Как то решить бы, чтобы ссылки сразу формировались
Марат 12 лет назад #
Bubble Gumoff 12 лет назад #
Марат 12 лет назад #
Есть два варианта решить проблему. Первое восользоваться компонентом SEO-pages. Но при этом для каждой страницы будет создаваться отдельное правило. И если у вас там сотни страниц, будет накладно.
Если всё же нужно шаблонно, второй вариант, переписывать файлы компонента. Роутер и контроллер. Если они закрыты, то никак.
Bubble Gumoff 12 лет назад #
Positive 12 лет назад #
1. Работает ли этот хак в ICMS 1.10?
2. Нужно уменьшить вложенность блогов. Излагаю в порядке по приоритету.
В идеале - до корня http://sait.ru/post.html или http://sait.ru/post (без .html)
Если невозможно, то сделать урлы хотя бы двухуровневые
- http://sait.ru/nazvanie-bloga/post.html или http://sait.ru/nazvanie-bloga/post,
- http://sait.ru/blog/post.html или http://sait.ru/blog/post.
Подскажите, может кто знает как это сделать? Много раз на форумах писал, но все говорят о сложностях, а решения нет.
P.S. По статьям подобное решение здесь, в 1.10 работает: http://instantcms.ru/forum/thread6216.html
Positive 12 лет назад #
Марат 12 лет назад #
Просто не вникал до конца, не посмотрел как реализовано. Этот хак только для приведения шаблонов к виду, привычному в php.
Если делать без хака, то шаблон будет выглядеть примерно так(пример с поста)
Reborn 12 лет назад #
Марат 12 лет назад #
Positive 12 лет назад #
По аналогии со статьями сделал для блога:
http://sait.ru/blogs_nazvanie-bloga_post-v-bloge.html,
если создать два поста с одинаковыми заголовками, второй получается такой:
http://sait.ru/blogs_nazvanie-bloga_post-v-bloge-10.html.
Это, по идее, хорошо.
Для клубов сделал так:
http://sait.ru/clubs_14_zapis-v-bloge-kluba.html,
при одинаковых заголовках второй такой: http://sait/clubs_14_zapis-v-bloge-kluba-11.html.
Это намного лучше, чем стандартный вариант. Но, урлы всё же длинными получаются. Может, кто-нибудь знает как убрать звенья из урла? Приведите примеры.
Positive 12 лет назад #
Positive 12 лет назад #
Positive 12 лет назад #