|
Результаты опроса: Помогло ли Вам это решение? | |||
Да | 2 | 66.67% | |
Нет | 0 | 0% | |
Я ничего не понял(а) | 1 | 33.33% | |
Голосовавшие: 3. Вы ещё не голосовали в этом опросе |
|
Опции темы |
10.12.2012, 18:49 | #1 | ||
Новичок
Регистрация: 07.12.2012
Сообщений: 11
Вес репутации: 0
|
Правильный Контекстный код на Joomla 1.7
На днях я впервые добавил свой сайт в эту систему, и, как и многие, столкнулся с тем, что код на сайте либо не устанавливается, либо сайт не лезет в сапу. Сколько за эти дни я перечитал обсуждений (и тут, и на серче) уже не упомнишь. Скачивал разные плагины, пробовал всякие танцы с бубном (вроде удаления той самой папки с неперивариваемым именем, и т.д.), вот только всё без толку.
Как оказалось, инструкция по установке кода на странице добавления новой площадки - некорректно составлена. То есть, у кого-то она будет работать, а у кого-то нет. Я постарался составить эту инструкцию так, чтобы дошло даже до самой деревянной головы. Итак, всем уставшим бороться с саповским кодом посвящается... Прежде чем приступить, проверьте что у вас есть Total Commander и WinRar. Хотя если вы вместо них пользуетесь чем-то другим - не беда. Шаг 1: со страницы добавления новой площадки скачиваем архив с длинющим именем вида d670f37280253c38a6a99b57b7e3efb9__php.zip Распаковываем его в папку с таким же именем (то есть, если у вас есть WinRar, то жмём на файле правой кнопкой и выбираем "Извлечь в d670f37280253c38a6a99b57b7e3efb9__php/"). Шаг2: Заходим в эту распакованную папку, там есть папка вида d670f37280253c38a6a99b57b7e3efb9 и ещё рядом с ней файл с таким же именем d670f37280253c38a6a99b57b7e3efb9.php Так вот, этот файл нам НЕ нужен (зачем он там вообще присутствует??). Нам нужна только папка d670f37280253c38a6a99b57b7e3efb9 . Соединяемся по FTP со своим сайтом и копируем эту папку d670f37280253c38a6a99b57b7e3efb9 в корень своего сайта. Убедитесь в начале, что вы копируете именно в корень (то есть, там присутствуют папки administrator, cache, cli, components, files, images, includes, libraries,...). Шаг3: Скопировав эту папку на сервер, поставьте в Total Commander'e на неё курсор и в верхнем меню: Файлы -> Изменить аттрибуты -> выставьте значение 777 и нажмите ОК. Шаг4: Не отключаясь от сервера идите сюда: templates/ИМЯ_ВАШЕГО_ШАБЛОНА_Joomla и найдите там файл index.php скопируйте его к себе на компьютер. Внимание!! Сразу же создайте на компьютере папку "Изначальный Шаблон" и скопируйте туда главный файл вашего шаблона. Если вы что-то испортите, то сможете потом восстановить исходный файл, скопировав его поверх изменённого. откройте файл и посмотрите есть ли там такое: <head> тут всякий код </head> Если есть, то вы нашли то, что искали - это главный файл вашего шаблона. Если там такого нет (как у меня), то вам надо порыться в папке templates/ИМЯ_ВАШЕГО_ШАБЛОНА_Joomla и во внутренних папках. Лично у меня этот файл был здесь: templates/ИМЯ_ШАБЛОНА_Joomla/layouts/template.php Обратите внимание, что он не обязательно должен называться index.php! Шаг5: Как только вы нашли главный файл вашего шаблона и вытащили его копию с сервера, откройте его и найдите секцию кода между тегами head: <head> тут всякий код </head> Теперь перед самым </head> вставьте: <?php if (!defined('_SAPE_USER')){ define('_SAPE_USER', 'ХЕШ-КОД'); } require_once('АДРЕС_САЙТА_НА_СЕРВЕРЕ'.'/'._SAPE_USER.'/sape.php'); $o['charset'] = 'UTF-8'; $o['force_show_code'] = true; $o['request_uri'] = $_SERVER['REDIRECT_URL']; $sape_context = new SAPE_context(); ?> ХЕШ-КОД - это имя папки, которую вы копировали на сервер в Шаге 2. АДРЕС_САЙТА_НА_СЕРВЕРЕ - это и был главный трабл кода, который предоставляет Sape. Изначально эта строка выглядит так: require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'); Эта строка составляет адрес той самой папки (точнее, файла sape.php внутри неё), которую вы скопировали ранее. Она составляет адрес из четырёх частей: ПУТЬ_К_ВАШЕМУ_САЙТУ_НА_СЕРВЕРЕ./.ИМЯ_ХЕШ_ПАПКИ./sape.php $_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php' Строки склеиваются вместе с помощью точек (.) В результате образуется строка-адрес к файлу sape.php с точки зрения самого сервера. Надеюсь, пока не слишком сложно? $_SERVER['DOCUMENT_ROOT'] - эта абракадабра спрашивает у сервера путь к вашему сайту и сервер отвечает что-то типа: "Ваш сайт находится на сервере в папке /var/www/html" Так вот, прикол в том, что это может быть неправильный адрес! Как и было в моём случае. Я не спец, но думаю, что сервер просто неправильно настроен, в результате чего саповские коды начинают искать сайт по неправильному адресу. И, вероятно, такое бывает на многих серверах. Это как раз и приводит к знаменитой ошибке: Цитата:
/home/vhosts/www.mysite.ru То есть, никаких /var/www/html , которые получает $_SERVER['DOCUMENT_ROOT'] там нет. Вместо того, чтобы полагаться на автоматику, нужно вписать красную часть адреса вручную, не забыв заключить её в одинарные кавычки: require_once('/home/vhosts/www.mysite.ru'.'/'._SAPE_USER.'/sape.php'); Где взять адрес сайта на сервере? Идём в админку Джумлы 1.7, в верхнем меню: Сайт - Общие настройки - вкладка Сервер смотрите самое первое поле "Путь к каталогу временных файлов" копируйте из него всё кроме /tmp части. Вставьте аккуратно это всё вместо $_SERVER['DOCUMENT_ROOT'] и обрамите одинарными кавычками. Теперь ваш код должен выглядеть примерно так: <?php if (!defined('_SAPE_USER')){ define('_SAPE_USER', 'd670f37280253c38a6a99b57b7e3efb9'); } require_once('/home/vhosts/www.mysite.ru'.'/'._SAPE_USER.'/sape.php'); $o['charset'] = 'UTF-8'; $o['force_show_code'] = true; $o['request_uri'] = $_SERVER['REDIRECT_URL']; $sape_context = new SAPE_context(); ?> Уфффф! Кстати, по поводу части кода, котый я выделил красным - он не присутствует в оригинальном коде Sape, но без него Sape не находит код Цитата:
Шаг6: Теперь, когда мы вставили код в head, плавно прокручивайте ваш главный файл шаблона и ищите, где происходит вывод контента. Ищите что-то вроде $this['template']->render('content'); Ключевые слова здесь template и content Эта строка определённо должна быть не в начале документа, и должна идти после всяких breadcrumbs и before-content'ов У меня эта строка целиком выглядит так: <section id="content" class="grid-block"><?php echo $this['template']->render('content'); ?></section> Вывод контента может находиться и в совершенно другом файле. Тут я не могу дать каких-то точных инструкций - ориентируйтесь на свою интуицию. Главное, не забывайте делать резервную копию каждого файла на тот случай, если вы чего-нибудь напортачите. Теперь мы должны выключить этот код, чтобы не стирать его. В принципе, можно было бы и стереть, но я предпочитаю иметь пути к отступлению в случае чего. Добавьте в этот код символы, выделенные красным: <!-- <section id="content" class="grid-block"><?php /* echo $this['template']->render('content'); */ ?></section> --> А что делать, если ваш код выглядит по-другому? Не переживайте. Смысл в том, чтобы весь блок заключить в эти штуки: <!-- и --> а затем в этом блоке после каждого <? или <?php вставить /* и перед каждым ?> или php?> вставить */ Будьте внимательны со всем этим! Структура должна получиться такая: <!-- тут всякий html код <? /* тут php код */ ?> тут ещё что-нибудь может быть --> Когда вы так сделаете, код выключится и не будет обрабатываться. Можете попробовать сохранить этот файл и заменить им старую версию файла на сервере. После чего обновите ваш сайт в браузере, и вы увидите, что весь контент пропал. Так и должно быть, значит всё сделано правильно. Теперь ниже, сразу после этого выключенного кода, вставьте: <? $text = 'КОД_ВЫВОДА_СТАТЬИ'; $text = $sape_context->replace_in_text_segment($text); echo $text; ?> Всё, что нам осталось сделать - это вставить КОД_ВЫВОДА_СТАТЬИ между одинарных кавычек в переменную $text. И вот тут может возникнуть самая большая сложность для тех, кто незнаком с PHP и прочими мамбо-джамбо (как я). По правде я понятия не имею о php, всяких там javascripts/mysql, я далеко не программист, а правлю коды всегда исходя из собственной интуиции и номинального знания html на уровне детсада старшей группы. Поэтому мне было сложно сообразить как же один код грамотно вставить в другой код. Но, выпив чашечку кофе и слегка напрягшись, я сконструировал что-то, что к моему величайшему удивлению заработало с первого раза. Что я сделал? те части кода, которые на html, я заключил в одинарные кавычки, а у того, что на php, я стёр открывающие и закрывающие теги, вот эти: <? и ?> они могут выглядеть и так: <?php и php?> а могут быть их комбинацией. Ещё я стёр echo посмотрев аналогичные участки кода. Также удалил все пробелы между частями строки. И склеил их точками (.) - как видел в готовом коде выше. Короче, у меня получилась такая структура: $text = 'html-код'.php-код.'html-код закрывающий'; ! Обратите внимание, что html-код в кавычках, а php-код - без кавычек. В результате получил вот это: $text = '<section id="content" class="grid-block">'.$this['template']->render('content').'</section>'; а всё вместе это выглядит так: <? $text = '<section id="content" class="grid-block">'.$this['template']->render('content').'</section>'; $text = $sape_context->replace_in_text_segment($text); echo $text; ?> Я понимаю, что у кого-то один вид всех этих абракадабр может вызывать отвращение. Но всё же напрягитесь и попробуйте разобраться что я тут понаписал. Это не ракетостроение, друзья мои, и если вы внимательно посмотрите, то сами быстро разберётесь. Я описал подробно как мог и искренне надеюсь что эта инструкция вам поможет. Всё что вам теперь осталось - это сохранить исправленный файл, залить его на сервер в ту же папку, откуда вы брали исходный, с заменой, и перезагрузить ваш сайт в браузере, надеясь и веря, что ничего не поломалось. Удачи вам! И бооольшущих заработков! |
||
10.12.2012, 19:00 | #2 | |
Добрый модератор
Регистрация: 09.07.2007
Адрес: глобус Украины
Сообщений: 27,600
Вес репутации: 1025
|
Захотите работать с биржей статей - узнаете.
Нет, только на хостингах с рукожопыми админами. Таких меньше одного процента. Цитата:
С этой строчкой может быть тоже большой эпикфейл ибо она НЕ работает намного чаще, чем встречаются сервера с кривым документ-рутом. А так вообще пять с плюсом вам за трудолюбие
__________________
Правильный хостинг. В личке бесплатно не отвечаю обычно. |
|
10.12.2012, 21:22 | #3 | ||
Новичок
Регистрация: 07.12.2012
Сообщений: 11
Вес репутации: 0
|
Цитата:
Цитата:
А она вообще для чего предназначается? Тоже что-то фиксит? Я где-то в интернете нашёл эти строчки и вставил, после чего всё заработало. |
||
10.12.2012, 22:42 | #4 | |
Добрый модератор
Регистрация: 09.07.2007
Адрес: глобус Украины
Сообщений: 27,600
Вес репутации: 1025
|
Цитата:
Для указания адреса текущей страницы коду сапы.
__________________
Правильный хостинг. В личке бесплатно не отвечаю обычно. |
|
11.12.2012, 10:02 | #5 | |
Новичок
Регистрация: 07.12.2012
Сообщений: 11
Вес репутации: 0
|
Я придумал как ещё определить путь к сайту на сервере.
Способ 2 (железный): 1. Создаём текстовый документ и пишем в него: <? $test = abc(); echo $test; ?> 2. Сохраняем его и называем checkpath.php 3. Соединяемся по FTP со своим сайтом и копируем этот файл в корень сайта. 4. Открываем в браузере адрес http://www.ВашСайт.ru/checkpath.php смотрим на сообщение об ошибке: Цитата:
PS Я уже не могу поправить свой первый пост, но буду благодарен, если модератор прилепит этот способ в нужное место |
|
11.12.2012, 11:01 | #6 |
Добрый модератор
Регистрация: 09.07.2007
Адрес: глобус Украины
Сообщений: 27,600
Вес репутации: 1025
|
Есть еще более железный способ - функция phpinfo();
__________________
Правильный хостинг. В личке бесплатно не отвечаю обычно. |
Опции темы | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
контекстный код | mortan | Вопросы по работе системы | 5 | 27.12.2013 18:57 |
Joomla. Все. Исправляем ERROR на главной и прописываем правильный редирект | dbsysru | Ошибки при работе с системой | 26 | 10.11.2011 13:33 |
Помогите установить контекстный код на DLE | akella_ | Контекстные ссылки и все, что с ними связано | 2 | 28.08.2009 10:11 |
HELP - не работает контекстный код! | skylander | Контекстные ссылки и все, что с ними связано | 1 | 07.08.2009 11:37 |
Контекстный трафик | jaboss7 | Контекстная реклама | 4 | 21.07.2009 13:10 |
Часовой пояс GMT +3, время: 13:07.