ЧПУ в Alto CMS - в стиле Livestreet, Wordpress, NiceURL и вообще как угодно

Движок Alto CMS обзавелся встроенным механизмом настраивания ссылок для статей (топиков). Это может быть важно для тех, кто переводит свои сайты с других движков (и много страниц уже проиндексировано поисковиками), либо тем, кто хочет формировать адреса статей по принципу ЧПУ (человекопонятные урл). Либо еще по каким-то соображениям хочет придать ссылкам определенный вид. Для начала должен предупредить, что если у вас уже есть сайт на Альто и Вы хотите обновиться до последней девелоперской версии, где поддерживается этот функционал, то вам нужно внести небольшие изменения в базу данных. SQL-запрос для этого находится в файле install/patch-0.9.7.sql.

После обновления движка в админке в разделе Настройки сайта/Ссылки появится новая секция — Статьи. И там вы можете задать, как у вас на сайте должны формироваться ссылки на статьи — либо как это принято в LiveStreet, либо выбрать один из стандартных вариантов в стиле Wordpress, либо задать какой-то свой формат.
Формирование ЧПУ в Alto CMS
Допустимые параметры в ссылке:
  • %year% — год топика
  • %month% — месяц
  • %day% — день
  • %hour% — час
  • %minute% — минуты
  • %second% — секунды
  • %login% — логин автора топика
  • %blog_url% — url коллективного блога (для личных блогов будет заменен на логин автора)
  • %topic_id% — id топика
  • %topic_url% — относительный URL топика (обычно — транслитерация его заголовка)

Для совместимости с популярным плагином NiceURL поддерживаются параметры:
  • %blog% — аналог %blog_url%
  • %id% — аналог %topic_id%
  • %title% — аналог %topic_url%

Для совместимости с Wordpress поддерживаются параметры:
  • %post_id% — аналог %topic_id%
  • %postname% — аналог %topic_url%

Вот примеры того, как вы можете задавать форматы ссылок и как они будут выглядеть на сайте:
  • articles/%topic_id%/ — будет преобразовано в site.com/articles/123/
  • %topic_id%.html — будет преобразовано в site.com/123.html
  • %login%/%topic_url%.html — будет преобразовано в vasya/kak-ya-provel-leto.html

Важно подчеркнуть — наличие окончания .html для топиков не является обязательным, но настоятельно рекомендуется, т.к. это позволит избежать возможных проблем и конфликтов с адресами экшенов.

Если вы решили использовать параметр %topic_url%, то необходимо сначала задать относительный URL для всех ваших статей. Это делается на той же странице — Генерация ссылок.


Можно, конечно, и вручную эти ссылки задать — входить в редактирование и править этот параметр для каждого топика.

Похожие статьи

  • Настройка ЧПУ в Alto CMS (вопрос)
    Возник вопрос по настройке ЧПУ. Настройки сайта —> Ссылки —> Произвольные %blog_url%/%topic_url%.html В итоге имеем адрес вида: site.ru/blog_url/http-nazvanie-topica-1html.html В чем может быть проблема?
  • Смена урл с редиректом
    Сейчас на сайте вид ссылок https://site.ru/sample-topic.html хочу сделать https://site.ru/blog-name/123.html При изменении ссылок, все внешние ссылки отваливаются с ошибкой 404. Как правильно сделать редирект,...
  • Внешние ссылки в новом окне
    Коллеги, подскажите, где и что нужно подредактировать, для открытия внешних ссылок в новом окне?
  • запрет на ссылки в топике
    Подскажите пожалуйста, как отключить ссылки в текстовом поле Топика?: такие: http://altocms.ru Такие: ссылка

57 комментариев

+1
Вау Вау. Радуют постоянные дополнения базового ядра. Чувствую движок будет очень востребованным.
Отредактирован:
0
Хм. интересно)) — востребованные функции начинают в ходить в базовый вариант, без необходимости ставить плагины.

Вопрос — при редактировании статьи можно будет получить короткую ссылку — которая всегда будет вести на статью, даже если ее ЧПУ ссылка изменится?
0
Вопрос — при редактировании статьи можно будет получить короткую ссылку — которая всегда будет вести на статью, даже если ее ЧПУ ссылка изменится?
Пока такого нет. Хотя, нет, если быть более точным — есть такое, но не рекомендуется к использованию. Потому что это источник дублей страниц для поисковиков, что не очень хорошо.

В движке планируется реализовать механизм редиректа, когда скажем, есть у страницы полный URL, который будет индексироваться, и короткий, который будет не внутри движка «шаманить» и выдавать страницу, а формировать нормальный редирект на постоянный адрес с кодом 301. Тогда и людям будет просто оперировать короткими адресами, и поисковики не будут индексировать ничего лишнего
0
Суть вопроса просто в чем. Когда пользовался Вордпрессом — там можно было получить короткую ссылку, которая работала всегда — даже если через время сменил формирование ЧПУ или если ЧПУ изменился из-за переименования статьи и т.д.
Это удобно когда размещаешь ссылки на внешних ресурсах… — они всегда остаются рабочими…

Но при этом не помню, что бы эти короткие ссылки были в индексе…
+1
Суть вопроса я понял. И согласен, что это нужно, и это один из вопросов, зачем нужен нормальный механизм редиректа, о котором выше написал. Обязательно посмотрю, как это в WP сделано
+1
Короткую ссылку получилось добавить быстрее, чем я предполагал. Сейчас в девелоперской версии в режиме редактирования топика добавилась кнопка «Получить короткую ссылку».

Для каждого топика действует ссылка вида: site.com/t/123/
0
Становится все интереснее))
0
Очень круто! Молодцы!
0
Замечательная новость!
0
Замечательно:))
Только есть один вопрос, где находиться файл обрабатывающий текст для ЧПУ?
Тоисть вот у меня к примеру в названии SLON, но в ЧПУ S меняется на Z и получается ZLON.
Я так понимаю нужно просто поменять букву на нужную в файле конверсии…

Второе, когда нажимаю «Выполнить генерацию ссылок для статей», выскакивает вот это:

E_NOTICE [8] Undefined variable: aUrls
See details in error.logSQL Error: Unknown column 'DBSIMPLE_ERROR_VALUE_NOT_ARRAY' in 'where clause' at /var/www/САЙТ/data/www/САЙТ/classes/modules/admin/mapper/Admin.mapper.class.php line 302 --- Array ( [code] => 1054 [message] => Unknown column 'DBSIMPLE_ERROR_VALUE_NOT_ARRAY' in 'where clause' [query] => SELECT topic_id, topic_url FROM ga_topic WHERE topic_url IN (DBSIMPLE_ERROR_VALUE_NOT_ARRAY) ORDER BY topic_date_add ASC [context] => /var/www/САЙТ/data/www/САЙТ/classes/modules/admin/mapper/Admin.mapper.class.php line 302 )

В логе ошибок выдает вот такое:

E_NOTICE [8] Undefined variable: aUrls (/var/www/САЙТ/data/www/САЙТ/classes/modules/admin/Admin.class.php on line 267)


При этом ссылки сформировались.
Отредактирован:
0
Только есть один вопрос, где находиться файл обрабатывающий текст для ЧПУ?
Вообще, в движке есть описания используемых языков и локалей, они лежат здесь:
engine/lib/external/UserLocale/i18n/

И там же для любого языка можно задать правила транслитерации. Сейчас эти правила заданы для языков ru (русский), uk (украинский), be (белорусский), bg (болгарский). Я постарался составить эти правила так, чтоб они подходили если не для всех, то для большинства языков, основанных на кириллице. В PHP нормально работает транслитерация для многих языков на основе латиницы (напр., умляуты в немецком), а вот кириллические тексты не умеет переводить в транслитерацию, поэтому приходится использовать правила транслитерации, где кириллическим символам ставится в соответствие латиница.

Кстати, будем премного благодарны, если кто-то решит добавить описания новых языков, или дополнит имеющиеся.

Насчет перевода символа S в символ Z — это была ошибка в правиле транслитерации, сейчас исправили
0
простите а есть ли в движке кириллический ЧПУ так как домен у меня кириллический и для меня это очень важно, спасибо.
0
Честно говоря, даже не думал, что может понадобится кириллический ЧПУ. Я вот даже не знаю, какие символы в нем могут быть, а какие нет, и одинаковы ли эти наборы для разных браузеров, да и как вообще браузеры на подобные ссылки реагируют.

Плюс возникает вопрос: а как быть с другими ссылками, которые формирует движок? Надо ли ссылки вида site.com/blog/, site.com/profile и т.д. переводить в вид сайт.рф/блог/, сайт.рф/профиль/ и пр.?

Т.е., отвечая прямо на Ваш вопрос — нет, такого функционала сейчас нет. Предугадывая следующий вопрос «А можно ли сделать?», отвечаю: наверное, можно, но я пока не знаю, как это сделать правильно.
0
ну по идее у вордпресса все это есть. пользуюсь уже давно именно кириллическими урлами. очень хорошо использовать такие урлы для гугла
0
Отличная новость! Праздники не помеха для новых обновлений и доработок :)
Спасибо за ваш труд.
комментарий был удален
0
Я выполнил SQL запрос из install/patch-0.9.7.sql. Вылезло вот это — #1060 — Duplicate column name 'topic_url'. То есть в моей таблице уже был такой столбец. Но в админке ни следа ЧПУ функционала(
0
Но в админке ни следа ЧПУ функционала
Совершенно непонятное описание бага, по которому даже непонятно что именно не работает.

В админке есть пуункт «Настройки сайта»?
На это странице есть вкладка/кнопка «Ссылки»?
Если по ней кликнуть, то там есть блок «Статьи»? (см. скриншот в топике)

И версия движка какая? Этот функционал только в девелоперской версии писутствует (которая на Гитхабе)
Отредактирован:
0
Нет, там только «Главная» и «Черновики»
0
И версия движка какая? Этот функционал только в девелоперской версии присутствует (которая на Гитхабе)
0
Версия 0.9.6. C гитхаба я пробовал ставить, выдавало ошибку. При нажатии на ссылку «перейти на сайт» на 4 этапе установки, переходило на ту же страницу /install. Типа циклило. Удалил директорию install — и уже не помню какая ошибка, но сайт не открывался. После этого и поставил стабильную версию.

Но, в общем, я понял, надо дев версию, буду курить дев версию. Спасибо за отзывчивость.
Отредактирован:
+1
Тогда этот функционал у Вас не будет работать. Можно лишь попробовать «костыль» сварганить, добавив правило рерайта в $config['router']['uri']. Напр., так:
<code>$config['router']['uri'] = array(
'~^(\d+)\.html~i' => "blog/\\1.html",
...
);</code>
Эту возможность, которая еще в ЛС была, не убирали, она работает. Но сами топики свой URL будут отдавать, как прежде.

Если, конечно, понятно, о чем я пишу. Либо объясните, какие адреса должны быть у Ваших топиков — подберем нужное правило
Отредактирован:
0
Спасибо, буду разбираться!
0
Получилось поставить дев версию. Все работает. Смущает только момент, что после установки, ссылка на главную сайта на странице 4-го эатпа установки возвращает тебя на your_site/install.
0
Чтоб этого не происходило, надо удалить или переименовать папку /install

Там ведь написано об этом на последнем шаге
0
Я уже удалил, не могу посмотреть, но кажется там написано «В целях безопасности, удалите каталог /install». Я из этого не понял, что удалять нужно обязательно.
0
Да, как-то не очень это очевидно. Учтем на будущее
0
А почему не сделать автоматическое удаление этой папки при установке? если ее все равно нужно обязательно удалить…
+2
Во-первых, не всегда у скрипта на это хватает прав.

Во-вторых, многие предпочитают не удалять ее, а лишь переименовать, поэтому удалять молча и без предупреждения — не есть хорошо. Значит, нужно усложнять логику и как-то выстраивать диалог. Но при этом есть еще куча соображений, как сделать установку более дружественной. Но тут в очередной раз упираемся в ограниченность ресурсов и в приоритеты.

Поэтому, наверное, ограничимся пока только тем, что как-то более внятные сообщения сформулируем. Но в будущем нужно будет инсталлятор более серьезно переработать.
0
Большое спасибо за развернутый ответ. Скажите переименование, а не удаление папки Инсталл — влияет на безопасность?
+1
Если переименовать ее так, что потенциальный злоумышленник, пожелавший Вам напакостить, не сможет догадаться, то нет
0
Парни, а в админке можно редактировать описание/иконку тегов? Как в том же вордпресе. Просто продублировать функционал для блогов
0
Хм, никогда не обращал внимания эту фичу в ВП. И как-то не думаю, что она очень уж востребована
0
Даже на том же хабре понемногу ушли от блогов к тегам(хабам).
habrahabr.ru/hub/javascript
Страница тега, как можно видеть содержит инфу о количестве топиков, подписчиках и коментах, плюс суммарный рейтинг.
Вот ещё пример joyreactor.cc/tag/gif там ещё иконка и топ авторов по тегу.
0
Даже на том же хабре понемногу ушли от блогов к тегам(хабам).
Нет, там есть хабы, но есть и теги — см. любой топик внизу текста. И Ваша ссылка — это ссылка на хаб, а не на тег.

Насчет хабов мне все ясно — востребовано, нужно, просят, будет. Меня в Вашем вопросе именно теги интересуют. На том же хабре страницы тегов уже нет, тег — это ключевое слово, по которому идет сразу поиск.

Или Вы под тегом имели ввиду аналог хабровского хаба?
0
Можно узнать, когда этот функционал попадет в released версию?
+2
Релиз планируется в самом конце этого месяца либо в начале следующего
0
Ура! Ребята, вы супер!
0
А ссылки на разделы блогов планируется подключать к ЧПУ? Ато как то не совсем логично, делаешь ссылку на статью вида site.ru/mycat/article.html, сокращаешь урлу в адресной строке и пытаешься перейти на site.ru/mycat/, а там 404.
0
Сделать переадресацию с site.ru/mycat/ на site.ru/blog/mycat/ можно уже сегодня. Правда, не из админки, а руками в конфиге прописывать надо. И прописывать, разумеется, для каждого блога/раздела
0
Это понятно, редиректы и в ЛС были. Мне кажется для блогов тоже должна быть настройка урлы.
0
Как быть если надо наоборот (с /blog/mycat/ сделать /mycat/)?
0
Пробую поставить post/%topic_id%/ в результате ошибка 404 при переходе на страницу. При добавлении $ или % к ссылке, post/%topic_id%/$ или post/%topic_id%/% — ссылки открываются, но с $ и с %.

articles/%topic_id%/ — будет преобразовано в site.com/articles/123/
Ошибка 404. Тоже не работает!
Прошу помощи!
Что я делаю не так?
0
указанные мною выше ЧПУ не работают. Помогите! пример сайта тут
0
На гитхабе пофиксен баг
+1
Допустимые параметры в ссылке:
%year% — год топика
%month% — месяц
%day% — день
%hour% — час
%minute% — минуты
%second% — секунды
%login% — логин автора топика
%blog_url% — url коллективного блога (для личных блогов будет заменен на логин автора)
%topic_id% — id топика
%topic_url% — относительный URL топика (обычно — транслитерация его заголовка)

Для совместимости с популярным плагином NiceURL поддерживаются параметры:
%blog% — аналог %blog_url%
%id% — аналог %topic_id%
%title% — аналог %topic_url%

Для совместимости с Wordpress поддерживаются параметры:
%post_id% — аналог %topic_id%
%postname% — аналог %topic_url%

Вот примеры того, как вы можете задавать форматы ссылок и как они будут выглядеть на сайте:
articles/%topic_id%/ — будет преобразовано в site.com/articles/123/
%topic_id%.html — будет преобразовано в site.com/123.html
%login%/%topic_url%.html — будет преобразовано в vasya/kak-ya-provel-leto.html

Важно подчеркнуть — наличие окончания .html для топиков не является обязательным, но настоятельно рекомендуется, т.к. это позволит избежать возможных проблем и конфликтов с адресами экшенов.

Будет хорошо, если такая инфа будет отображаться прямо в админке в целевом разделе. Оформить в рамочку, чтобы админ знал, как он может настроить ссылки. Если честно, я не смотрел, может уже и есть :) Если что, извиняюсь.
0
Столкнулся с такой проблемой, если заголовок темы начинается с цифры, выдает 404 ошибку статьи, если редактируем ЧПУ убрав цифры вначале либо перенеся её в средину статья работает. Уже есть решение этой проблеме?
0
У меня была такая же проблема, только с пользователем.
Если имя пользователя — цифра, то Альто думает что это топикИд и вываливает 404. Пришлось немного поковыряться в исходниках.
0
… то Альто думает что это топикИд и вываливает 404
А в каком месте?
0
В 0.9.7.1 Router.class.php
if ($sTopicUrlPattern) {
$aRewrite = array_merge($aRewrite, array($sTopicUrlPattern => 'blog/$1.html'));
}
return $aRewrite;
0
Да, исправлено
0
хотелось бы допилить ЧПУ параметром %topic_type%. в связке с возможностью создавать в альто свои виды топика было бы удобно делать ссылки типа: %topic_type%%topic_id%/ в site.com/topic5/ или site.com/fotoset6/.
можно такую вещь провернуть?
+1
можно такую вещь провернуть?
Уже провернули
0
Пытаюсь выставить на другой параметр — не получается. В чём может быть проблема?
0
Нужна конкретика — что и как настраиваете, чего ожидаете и чего получается вместо ожидаемого
0
Согласен.
В общем проблема такая.
На сайте 10 статей. Я решил изменить формат ЧПУ. Захожу в админку (пункт ссылки) — выбираю другой пункт (не важно какой) — сохраняю — ничего не меняется.

Решил вопрос редактированием 2х параметров в БД, а затем очисткой папки run/asset/ — пункт встал нужный.
Отредактирован:
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.