On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Всем привет!
    Вопрос новичка про дружественные URL:
    создал вторые страницы сайта, дал им дружественные URL простого вида, типа contact.

    Некоторые ссылки в дизайне страниц статические, соответственно я на них прописываю (например) http://my_site.ru/contact.

    Пока я нахожусь в административном режиме все работает.

    Выхожу из него - ссылки на эти элементы не работают.
    При переходе по ним в адресной строчке выходится такое сообщение: http://my_site.ru//main.html?refurl=%2Findex.php%3Fq%3Dcontact&err=1 и показывается первая страница сайта.

    В настройках Администрирование > Конфигурация > Настройка друж.URL такие :
    Использовать дружественные URL: Да
    Префикс для дружественных URL: /
    Суффикс для дружественных URL: .html
    Использовать псевдонимы в URL: Да
    Использовать вложенные URL: Нет
    Разрешить повторяющиеся псевдонимы: Нет
    Автоматически генерировать псевдоним: Нет


    В поле <head> поставил <base href="http://my_site.ru/"/> и поменял ht.access в .htaccess.

    В чем ошибка? Как ссылки запустить? Спасибо за внимание!
    • думаю все дело вот в этом
      Префикс для дружественных URL: /
      это зачем такой префикс?:) Понимаю суффикс такой - да. А префикс будет давать ссылки вида:
      http://my_site.ru//page.html - что совершенно неправильно.
        http://modx.ru - российская поддержка MODx
        http://newscup.ru - экспериментальный проект
        http://yentsun.com - персональный сайт
      • Убрал, но проблема осталась - все то же самое
        • придется в таком случае вам дать ссылку на нерабочий сайт.
          если не хотете огласки - в личном сообщении.
            http://modx.ru - российская поддержка MODx
            http://newscup.ru - экспериментальный проект
            http://yentsun.com - персональный сайт
          • <base href="[(site_url)]">

            префикс убрать! grin что такое "вложенные урлы", понятия не имею:) у меня аглийцкая версия, в ней такого нет:) может, и стоит галочку поставить. но, по-любому, судя по всему, машинка урлы на выводе переделала, но вот через index.php они не протаскиваются, так что смотри нижнюю строчку в моём .httaccess

            вдруг поможет, вот что у меня в .httaccess

            php_flag zlib.output_compression On
            php_value zlib.output_compression_level 5
            
            RewriteEngine On
            RewriteBase /
            
            ...вот эту хрень (ниже) я от того сделал, что у меня суффикс -- /, 
            ну, и чтоб без www сайт отображался при всех раскладах, и чтоб зеркал не было (это для Яндекса)
            
            RewriteCond %{HTTP_HOST} !^jurist-info.ru$
            RewriteRule ^ http://jurist-info.ru%{REQUEST_URI} [R=301,L]
            RewriteRule ^index/ http://jurist-info.ru/ [R=301,L]     
            
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
            
              [img]http://jurist-info.ru/pic/rrr.jpg[/img]

              Безжалостный пияр!
              Artima -- неуч!
              Осторожно: преступная локализация -- modx-cms.ru
              Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

              Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
            • то, что выше, тож полезно!

              но причина в другом. документы должны быть опубликованы. такая абракадабра в адресной строке в новой цмске появляется только в том случае, если пытаешься прогрузить "несуществующую" страницу, но при условии, что она в базе есть, значит -- published = 0;

              скорее всего в настройках стоИт не публиковать документы по умолчанию, и ссылки в дереве имеют красно-коричневый цвет. необходимо либо в настройках сайта выставить публикацию по умолчанию, либо ручками при редактировании документа, на второй вкладке, поставить галочку, либо правой кнопокй мыши по документу в дереве и вторая ссылка снизу... обычно.
                [img]http://jurist-info.ru/pic/rrr.jpg[/img]

                Безжалостный пияр!
                Artima -- неуч!
                Осторожно: преступная локализация -- modx-cms.ru
                Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

                Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
              • чтобы поставить статическую ссылку, лучше вставить в шаблон [[GetLink?id=n]], где n -- номер страницы, тот что в дереве рядом с ссылкой в админке, а GetLink в простейшей реализации есть сниппет:

                $pid = $id;
                $link = $etomite->getDocument($pid,'pagetitle, longtitle, description, menutitle');
                $tol = (!isset($tol)) ? $link['pagetitle'] : "$tol";
                $output = '<a href="[~'.$pid.'~]" title="'.$link['longtitle'].'">'.$tol.'</a>';
                return $output;
                


                в результате выведется ссылка с текстом, содержащемся в заголовке страницы. если этот текст не устраивает, можно подправить строчку типа $tol = (!isset($tol)) ? $link[’longtitle’] : "$tol";, либо вставить сниппет со следующими параметрами [[GetLink?id=n&tol=`да любая херня из башки:)`]]
                ` -- это ё в английской раскладке, лучше не использовать спецсимволы в t(ext)o(f)l(link), особенно ; ? $ "

                да, сниппет создать, назвать GetLink

                или совсем просто: <a href=’[~id~]’>да любая херня из башки</a> -- парсер сам заменит id на адрес страницы, id -- это всё тот же индекс страницы в базе, каждая страница имеет свой уникальный id и он никогда не меняется, и нет необходимости править адрес вручную, даж если документ был перемещён, ссылка на него изменится автоматом.

                MODxCMS для того и создавалась, чтоб с лёгкостью админить динамические сайты и сводить к минимуму ручную работу, пусть даже и проставление ссылок на документы.

                если есть необходимость, то можно вставить ещё такой кусочек в сниппет:

                $pid = $id;
                $link = $etomite->getDocument($pid,'pagetitle, longtitle, description, menutitle');
                $tol = (!isset($tol)) ? $link['pagetitle'] : "$tol";
                
                if ($pid == $modx->documentIdentifier) {
                $output = '<strong id="link_'.$pid.'">'.$tol.'</strong>';
                }
                else {
                $output = '<a href="[~'.$pid.'~]" title="'.$link['longtitle'].'"  id="link_'.$pid.'">'.$tol.'</a>';
                }
                return $output;
                


                если id в ссылке совпадает с id страницы, на которой прогружен GetLink, то выводится не ссылка на самое себя, а текст ссылки, но жирным, чтоб всё было грамотно:) . саму же ссылку можно офрмить через css, указав стили для #link_..., вплоть до указания фона в виде конвертика, если ссылка на контакты:) но надо помнить, что, если на странице будет присутствовать по тем или иным причинам две ссылки с одним и тем же id="link_...", валидатор будет ругаться, тогда id надо заменить на class
                  [img]http://jurist-info.ru/pic/rrr.jpg[/img]

                  Безжалостный пияр!
                  Artima -- неуч!
                  Осторожно: преступная локализация -- modx-cms.ru
                  Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

                  Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
                • и есчо!

                  если при ошибочном запросе выводится заглавная страница, значит, в системных настройках сайта, в конфигурации сайта, в качестве "ошибочной" страницы она и указана, её id . Надо сделать под ошибку отдельную страницу, так как для страницы с 404 error машинка выдаёт 404-ый статус в header’е, и поисковики считают, что такой страницы не существует, они её не индексируют, по ссылкам с неё не переходят!
                    [img]http://jurist-info.ru/pic/rrr.jpg[/img]

                    Безжалостный пияр!
                    Artima -- неуч!
                    Осторожно: преступная локализация -- modx-cms.ru
                    Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

                    Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
                  • 2 openagate: скажи тому кто писал GetLink, что нечего лишние запросы к базе делать
                    getDocument($pid,'pagetitle, longtitle, description, menutitle');

                    поля description и menutitle не используются в сниппете (это подсказка для крутых оптимизаторов специально).

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

                    Спасибо.
                      http://modx.ru - российская поддержка MODx
                      http://newscup.ru - экспериментальный проект
                      http://yentsun.com - персональный сайт
                    • я писал:)) твоя правда... но коннект один -- SELECT по ID, и всё... а вот в случае сравнения id с текущим, делается 2 коннекта -- так что если кому-то вздумается таким образом строить меню, да есчо так, чтоб страницы сами на себя не ссылались, надо готовиться к тому, что хостинг ляжет. поправочка, я -- ламьё, канешна, касательно всяких запросов, я знаю только, что критичным для хостинга является количество одноврменных коннектов к одной таблице, а в моём случае будет именно один -- select, и всё.. а то, что выбирать будет несколько полей, думаю, что не так страшно:)

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

                      есчо немного ликбеза для новичков:

                      $link = $etomite->getDocument($pid,’pagetitle, longtitle, description, menutitle, introtext, alias’);

                      echo $link[’introtext’]; -- выводим интротекст, к примеру, не знаю, как его по-русски обозвали
                      echo $link[’alias’]; -- выводим алиас, то есть contact, например... и т.д. и т.п.

                      если надо вывод подоформить, то делаем так:

                      $output = "<h1>".$link[’pagetitle’]."</h2>";
                      echo $output;

                      и главный Ахтунг, всётки, ни в коем случае не указывать в качестве ошибочной страницы ту, которая по умолчанию, с ID=1, если это входная, а сайт новый, то дальше входа поисковики не пойдут!

                      UPD:

                      не злись, yentsun:) я писал поступательно, как только у меня появлялись мысли, после того, как я ковырялся в машинке. я знаю, что если в топике появляется новый ответ, то на почту падает извещение, если в Additional Options... стоит галочка напротив Notify me of replies. я не уверен, что извещение падает каждый раз, как модифицируется ответ. поэтому, допуская, что Алексей мог оперативно среагировать на измения в топике, мало ли, может, ему срочно, я и не стал делать апдейт своего поста. надеюсь, я смог помочь человеку, так же, как мне в своё время помогли, к примеру, в англоязычной части форума, отвечая на мои, казалось бы, бестолковые вопросы.
                        [img]http://jurist-info.ru/pic/rrr.jpg[/img]

                        Безжалостный пияр!
                        Artima -- неуч!
                        Осторожно: преступная локализация -- modx-cms.ru
                        Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

                        Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun