Компонент и плагин "SEO pages"

+90
5.06K
Доброго времени суток, друзья!

Представляю вашему вниманию новую разработку. Те, кто следил за темой, уже в курсе. Особого интереса тема не вызвала, да и как обычно, желающих
потестировать нашлось немного. Тем не менее, ОГРОМНОЕ СПАСИБО тем, кто участвовал. Для полного теста в таком темпе нет времени. На носу отпуск, поэтому решил выложить разработку, чтобы осталось пару дней для исправления, если всё же найдутся критические ошибки. В целом, вроде бы всё работает. Почему говорю, вроде бы? Потому что разработка охватывает всю систему. Поэтому возможно всё.

Описание: Разработка позволяет переопределить seo-параметры для каждой страницы. Под seo-параметрами понимается uri страницы, заголовок страницы(то что находится между тегами <title></title>), ключевые слова(meta-тег keywords), описание(meta-тег description). URI можно переопределить для любой страницы сайта, остальные параметры только для тех страниц, которые являются результатом работы какого-либо компонента. Чтобы было понятнее, опишу, что делает компонент и что делает плагин.

Итак, КОМПОНЕНТ обеспечивает удобной админкой для редактирования и занесения данных в БД. Вторая задача компонента — переопределение uri. Как это происходит? В систему заложена работа файла custom_rewrite.php, схожего с файлом url_rewrite.php, про который все слышали и который является внутренней эмуляцией mod_rewrite. В этот файл можно записать определенные правила, написанные с применением регулярных выражений. И в соответствии с этими правилами будет происходить замена url. Эти правила можно заносить вручную. Но это создает определнные трудности. Компонент обеспечивает простое создание правил для переопределения url. В данной версии поддерживаются только простые правила. Явное соответствие определенному uri и явная замена другим. Шаблоны
не поддерживаются.

ПЛАГИН обеспечивает замену других seo-параметров. Привязан к событию работы компонента. Поэтому плагин будет работать только на тех страницах, которые являются результатом работы какого-либо компонента. В админке плагина можно включить "быстрые ссылки". Если включено, то на страницах сайта на фронтенде появится ссылка на страницу добавления или редактирования в админке.


УСТАНОВКА.
1. Скачиваем архив.
2. Если у вас уже существует файл custom_rewrite.php, то смержим данный файл с архива с вашим файлом(это означает, что правила
с вашего файла заносите в файл с архива)
3. Заливаем архив на хостинг.
4. Устанавливаем компонент seo_page (SEO страницы).
5. Устанавливаем соответсвующий плагин.
6. Включаем плагин.
7. Если нужно, в настройках плагина включаем "быстрые ссылки".


КАК РАБОТАТЬ? После установки, идем в админку компонента "SEO страницы". Админка схожа с админкой других компонентов.
Нажимаем кнопку "Новая SEO-страница", появится страница добавления. Имейте ввиду, что SEO-страница в разработке позиционируется с одной страницей во фронтенде и одним правилом в файле custom_rewrite.php. Обратите внимание, обязательно нужно заполнить только одно поле "Текущий URI", остальные поля необязательны. Если какое-то поле не заполнено, то остается прежнее значение, определяемое системой или каким-либо компонентом. Примеры как вводить uri смотрите пояснительные записи в админке. После заполнения нужных пунктов сохраняем seo-страницу.

Можно заменить любой ури на любой ури. Главное, чтобы ури, на который меняете текущий, был уникальным для сайта.


ВАЖНО. Чтобы работал плагин, нужно будет внести небольшое изменение в файл ядра /core/cms.php. Это строка примерно 1723
$is_component = false;
Заменяем на:
$is_component = true;

Это, как я понял, небольшой недочет. Видимо никто не использовал событие AFTER_COMPONENT_'.mb_strtoupper($component), поэтому и не заметили. По названию событие должно работать после работы компонента. Но из-за вышеуказанного флага оно не работает вообще. И вообще, этот флаг можно убрать, имхо.

СКАЧАТЬ АРХИВ


PS. Замену по шаблону пока не стал делать. Просто не успею. Сами шаблоны несложно, сложнее сделать их добавление в админке. Это надо обдумать. Возможно, когда будет посвободнее, доделаю. Сегодня-завтра в блоге постараюсь выложить инструкцию, как можно написать шаблон для смены url.

Приятного пользования!

UPDATE 15.07.2012

Архив обновлен. Исправлена критическая ошибка, возникающая при деактивации seo-страницы. При деактивации seo-страницы с id, например, равным 1, некорректно деактивировались и страницы id = 1*. Изменения затронули только файл /admin/components/seo_page/backend.php. У кого установлено, перезалейте.

UPDATE_2 15.07.2012

Архив обновлен. Исправлена ошибка, связанная с применением уникальных индексов в БД. В связи с чем невозможно было создавать более 1-й seo-страницы без параметра "URI замены". Для того, чтобы легче было исправить баг, было решено повысить версию компонента. Поэтому в архиве теперь версия 1.1.1. Не удивляйтесь такому быстрому скачку с версии 1.0.0. В файле install.php предыдущей версии по ошибке, чисто механически была указана версия 1.1.0. Поэтому, чтобы система увидела компонент для обновления пришлось указать версию 1.1.1.
Обновляемся как обычно. Перезаливаем архив. Идем в админку. В админке Компоненты->Установить компоненты.
"Найдены компоненты, доступные для установки:", нажать на ссылку "SEO-страницы v1.1.0 > 1.1.1".
+1
RIM5 RIM5 12 лет назад #
Ого... Вот это компонент smile
А для разделов статей тоже можно будет настроить seo-теги?
+6
Марат Марат 12 лет назад #
Для любой страницы...
-2
Алексей Т Алексей Т 12 лет назад #
Для серьезных сайтов обязателен
Спасибо
0
Крот Крот 12 лет назад #
плюсанул, посмотрю обязательно)
0
kaless kaless 12 лет назад #
компонент очень нужный, но

Код PHP:
внести небольшое изменение в файл ядра /core/cms.php.
 $is_component = false;
 Заменяем на:
 $is_component = true;
у меня такого нет.
+2
Марат Марат 12 лет назад #
Странно. Посмотрел в дистрибутиве, строка 1724. Ошибся на одну строчку. Видимо, у вас изменения в файле. Найдите метод public function proceedBody(). Внутри блока метода найдете строчку.
0
googlebot googlebot 12 лет назад #
Марат +, вещь нужная, имхо такие возможности должны быть в ядре системы...
+2
Марат Марат 12 лет назад #
С шаблонами не получится... По крайней мере так просто... Не посмотрел, думал для замены используется preg_match, на самом деле str_replace(). Поэтому без изменений системного файла не выйдет.
0
lezginka.ru lezginka.ru 12 лет назад #
+
0
Александр Александр 12 лет назад #
Менять не буду, прогнозирую что в 2.0 появиться и так. Такой хак должен быть в ядре
+1
Александр Александр 12 лет назад #
А ну и автору конечно же ПЛЮСЫ!!!
+1
KS KS 12 лет назад #
+ !
0
Positive Positive 12 лет назад #
Марат, всё просто замечательно, если бы не два облома!

Первый - нужно то же самое, но уже для версии на utf-8. Её многие очень-очень ждут, даже проекты не начинают делать.

Второй - невозможность "автоматизации" назначения вложенности. Если бы движок управлялся одним админом, то больше ничего не надо было бы. Но здесь же пользователи, регистрации, у каждого свой контент... Опубликует кто-то статью, и пока админ доберётся до сайта чтобы изменить ссылку по своему замыслу, на статью уже появятся ссылки с других сайтов. Админ изменит uri, и эти ссылки уже не актуальны... А когда пользователей много, и все публикуют...

Короче, Компонент ОЧЕНЬ ТРЕБУЕТ ДАЛЬНЕЙШЕГО РАЗВИТИЯ!!!
+3
Марат Марат 12 лет назад #
Прекрасно понимаю )
По утф-8, только в августе. После отпуска. Пока никак не успею.
По шаблонам, как раз работаю над этим. Вроде бы нашел решение, но нужно потестировать. Сегодня-завтра попробую выложить инструкцию. Но будет не в рамках компонента. Но тоже не сложно. Пару строчек в файле ядра, ну и сами шаблоны. Пока не точно. Если будет всё работать.

А ссылки с других сайтов, вроде не страшно. От старого адреса идет 301-редирект на новый. Только не знаю, передается ли при этом статический вес. Спецы, что скажут?

У разработки есть ещё одно назначение - другие seo-параметры, которые тоже иногда важны. Например тайтлы. Это уже нужно отдельно для каждой страницы.
0
Positive Positive 12 лет назад #
Пусть в августе, главное - чтоб было). До августа не так много, да и стабильной версии на utf-8 ещё нет.
Очень хорошо, что продолжаешь разработку! Тайтлы тоже важны.
0
.... .... 12 лет назад #
Кто может объяснить для чего эта вещь?
+2
AlexSF AlexSF 12 лет назад #
Скажите, а вы читать пробовали?
Марат:
Разработка позволяет переопределить seo-параметры для каждой страницы. Под seo-параметрами понимается uri страницы,заголовок страницы(то что находится между тегами <title></title>), ключевые слова(meta-тег keywords), описание(meta-тег description).
По моему этим всё сказано.
Но всёже попытаюсь разъяснить. Если вы не заметили, то обратите внимание, что при создании разделов контента не предоставляется возможность заполнять - заголовок страницы, ключевые слова и описания - для создаваемых страниц. А просто добавляет эти значения из главных настроек сайта. Что приводит к дублям - заголовков страниц, ключевых слов и мета описаний. Что пагубно влияет на СЕО вашего сайта. Это относится не только к разделам статей, но и практически ко всем компонентам.
Так вот, главная задача этого компонента - исправление данной оплошности.
+2
Марат Марат 12 лет назад #
Его уже нет с нами )))
+1
AlexSF AlexSF 12 лет назад #
Классный компонент! Спасибо и +
Работает великолепно, почти...
Короче, столкнулся с проблемкой.

Установил компонент, плагин, исправил на $is_component = true;
Создал первую СЕО страницу.
Начал создавать вторую.
Нажимаю создать/сохранить , а в ответ Запись не была добавлена в БД. Пытаюсь повторить, но эффект тот-же.

Удаляю первую страницу. И создаю другую - всё ОК, страница создалась со следующим номером ID. Но получить список из двух и более страниц так и не получилось.

Если я чего не так делаю прошу указать на ошибки.

Спасибо.
+2
Марат Марат 12 лет назад #
Не получилось смоделировать вашу ситуацию. Можете дать в личку доступ с админкой и фтп доступ. Нужно смотреть на месте.
0
maia maia 12 лет назад #
Грю ж - волшебник!!!
0
lezginka.ru lezginka.ru 12 лет назад #
это компонент решает проблему дублирования в тайтле названия сайта ?
http://instantcms.ru/blogs/seo-vs-instantcms/nemnogo-optimizaci-ne-pomeshaet.html
+3
Марат Марат 12 лет назад #
Нет. Название сайта в тайтле останется. От него можно избавиться только отредактировав строку 173 в файле /core/classes/page.class.php, как советует Tempest в посте по ссылке.
+2
Марат Марат 12 лет назад #
Исправлена критическая ошибка. Подробности в конце поста выше(см. UPDATE 15.07.2012).
Спасибо maia, что заметила и сообщила!
+2
Марат Марат 12 лет назад #
Сегодня день исправления багов и ошибок )))
Благодаря пользователю AlexSF была выявлена ещё одна ошибка. Подробности в посте UPDATE_2 15.07.2012. Спасибо, AlexSF!
Это всё maia виновата, говорит волшебник. Вот и сглазила ))). А если серьезно, противопоказано летом работать. Невозможно сосредоточиться в полной мере. Поэтому и ошибки. Ещё и с отпуска пришлось сорваться раньше времени. Обстоятельства...
+2
AlexSF AlexSF 12 лет назад #
Ещё раз спасибо за отличный компонент.
Надеюсь это не я из отпуска вырвал )))
+1
Марат Марат 12 лет назад #
нет, конечно )
0
ermakover ermakover 12 лет назад #
Компонент отличный!!! Особенно возможность переделать длинные адреса с множеством каталогов и подкаталогов на адрес в корне сайта, ведь ничто так не любит Яндекс, как страницы, расположенные в корне сайта.

Но вот у меня не получается поставить SEO, например, на раздел доски объявлений. То есть адрес раздела меняется на новый, а заголовок страницы, ключевые слова и описание остаются прежними.

Может быть, я чего не так делаю?
0
ermakover ermakover 12 лет назад #
Разобрался, прошу прощения...
0
Man Man 12 лет назад #
У меня та же ситуация, на доске объявлений не меняется заголовок страницы.
Как вы разобрались?
0
Man Man 12 лет назад #
Все понял, по мимо компонента, нужно было еще установить плагин.
+1
vpugachev vpugachev 12 лет назад #
Компонент отличный. Наконец то я до него добрался и установил на свой проект.

Сомнение пока у меня вызывает только то, что если я например заменил ури board/13 на nedvizhimost.html но все равно во всех компонентах и модулях сайта ссылки будут board/13 а уже потом будет переадресовываться на nedvizhimost.html. Т.е. если специально не ставить где то ссылку на nedvizhimost.html то получается на сайте не будет ни одной ссылки на неё. Как с точки зрения ПС это будет выглядеть?
0
letsgo letsgo 12 лет назад #
Чтобы оценить надо видеть,я пока не ставил. После выхода 1.9.1 уже буду смотреть, хотя в последнее время просто каждый проект стал переделывать урлы и прочее под нужное.
0
Михаил Михаил 12 лет назад #
Марат, при добавлении очередной записи файл custom_rewrite.php стал нулевым и пустым.
Не писали ли какой скрипт, чтобы с базы данных, все записи по сео перезаливались в файл?
+2
Марат Марат 12 лет назад #
К сожалению, этого пока нет.
Странный глюк. Сам использую компонент, пока всё нормально. Вручную не редактировали файл custom_rewrite.php? Желательно не трогать.
Вроде бы понял причину, из-за чего может быть. По какой то причине не подставился id записи, нужно ввести проверку. Исправлю.
Если не срочно, потерпите немного. В течении недели постараюсь сделать скрипт для восстановления файла из БД.
0
Михаил Михаил 12 лет назад #
делаем пхп файл на хосте - заливаем туда след код

Код PHP:
  1. <?php
  2. $hostname = "localhost";
  3. $username = "ИМЯ_ПОЛЬЗОВАТЕЛЯ";
  4. $password = "ПАРОЛЬ";
  5. $dbName = "БАЗА_ДАННЫХ";
  6. $userstable = "cms_seo_page";
  7. define('SITE_NAME', 'http://'.$_SERVER['SERVER_NAME'].'/');
  8. $link=MYSQL_CONNECT($hostname,$username,$password);
  9. $q = mysql_query("SELECT * FROM cms_seo_page");
  10. $rows = mysql_num_rows($q);
  11. $fields = mysql_num_fields($q);
  12. for ($c=0; $c<$rows; $c++) {
  13. $rules = '
  14. //start_seo_page-'.mysql_result($q, $c, 0).'<br>
  15. $rules[] = array(<br>
  16. \'source\' => \'/^'.str_replace('/', '\/', mysql_result($q, $c, 3)).'$/i\',<br>
  17. \'target\' => \''.SITE_NAME.mysql_result($q, $c, 4).'\',<br>
  18. \'action\' => \'redirect-301\'<br>
  19. );<br>
  20. $rules[] = array(<br>
  21. \'source\' => \'/^'.str_replace('/', '\/', mysql_result($q, $c, 4)).'$/i\',<br>
  22. \'target\' => \''.mysql_result($q, $c, 3).'\',<br>
  23. \'action\' => \'rewrite\'<br>
  24. );<br>
  25. //end_seo_page-'.mysql_result($q, $c, 0).'<br>';
  26. echo $rules."<br>";
  27. }
  28. ?>
далее копируем полученный в браузере текст в файл custom_rewrite.php
<?php
function custom_rewrite_rules(){

ВСТАВЛЯЕМ ТЕКСТ

//строчку ниже не убирать, это заглушка. Чтобы не выкидывало на 404 страницу при пустом файле
//применительно к компоненту seo-page
$rules[] = '';
return $rules;
}
?>
0
Михаил Михаил 12 лет назад #
Еще раз код, а то он не влез в предыдущем посте, как-то косо. Вроде все верно
Спойлер
+1
Михаил Михаил 12 лет назад #
Марат, еще вопрос возник.
Есть компонент для инстанта - sitemap карта сайта, назначение думаю понятно.
Но все карты он делает со старыми не сео ссылками, есть ли смысл тогда использовать его или все норм, или использовать другой какой сайтмеп генератор?
-1
Reborn Reborn 12 лет назад #
Смысла его использовать нет. Он берет урлы из БД .
0
Dost Dost 12 лет назад #
Отличный компонент, просто незаменим для некоторых страниц. Спасибо! Было бы удобно если бы плагин выводил

+++
-1
Reborn Reborn 12 лет назад #
Отписываюсь по поводу индексации. Страницы отлично влетели в индекс. Марат, спасибо +++
0
Man Man 12 лет назад #
После установки - перестала работать форма сортировки на доске объявлений.
В чем может быть причина, кто знает?
+1
Man Man 12 лет назад #
Сейчас попробовал отключить сео-страницу, которую создал для одной из категорий доски объявлений и форма сортировки заработала. А когда ее включаю, то опять не работает.
Имеет ли смысл создавать сео-страницу для доски объявлений, если после этого не работает сортировка?
0
Apsent Apsent 10 лет назад #
плюсую к данному вопросу, только в моем случае пропал не уровень вложенности а поменялся внешний вид каталога.до изменения был вот так
а после изменения урл стало вот так и в две колонки (не обращайте внимание на то что там разные разделы каталога)
Как эту проблему решить может кто подскажет
0
Марат Марат 10 лет назад #
Друзья!
Компонент меняет ури, формируемый компонентом, на задаваемый пользователем.
Большинство функций компонентов(всякие фильтры, шаблоны...) привязаны к ури, который формируется компонентом.
Так что вполне возможно, что эти функции перестанут работать. Это нормально.
Сам пользуюсь компонентом и пока что не возникало таких проблем. Из-за чего? Потому что не стоит все страницы загонять под компонент. Это в основном ВЧ или СЧ, в основном, главная страница какого-то компонента или страница категории. И ни разу не попадалась страница с фильтрами.
Если что-то не работает, выбор за вами. Скорее всего, лучше убрать сео-ури с этой страницы.
0
Apsent Apsent 10 лет назад #
Тем не менее огромное спасибо за данный компонет!! Всеравно буду его использовать. Подскажите это самая свежая версия или есть обновленный?
0
Марат Марат 10 лет назад #
Есть посвежее. Последняя версия
0
Bubble Gumoff Bubble Gumoff 12 лет назад #
А можно сделать так чтобы seo ссылка меняла в базе данных старую,
а старая ссылка писалась в файл, в htaccess c rewrite 301
Чтобы во всех компонентах ссылка соответствовала новой seo ссылке.

vpugachev:
Сомнение пока у меня вызывает только то, что если я например заменил ури board/13 на nedvizhimost.html
но все равно во всех компонентах и модулях сайта ссылки будут board/13
а уже потом будет переадресовываться на nedvizhimost.html.
Т.е. если специально не ставить где то ссылку на nedvizhimost.html то получается
на сайте не будет ни одной ссылки на неё. Как с точки зрения ПС это будет выглядеть?
P.S. Это будет выглядеть плохо!
0
Марат Марат 12 лет назад #
А можно сделать так чтобы seo ссылка меняла в базе данных старую
К сожалению, этого никак не сделать. Потому как ссылки не хранятся в БД. Имею ввиду урлы. В компонентах они формируются динамически посредством php-кода.
Поэтому везде останутся ссылки на старый адрес, а уже оттуда 301-редирект на новый. Ну если только ручками писать. При желании можно и ручками вписать в меню. При создании меню можно выбрать урл и вписать ручками. В остальных местах уже никак.
Не думаю, что это так критично. По-крайней мере, у меня работает на сайте.
Не знаю, передается ли при 301 редиректе вес страницы. Если да, то вообще без проблем.
0
mr.Z mr.Z 12 лет назад #
Спасибо ОГРОМНЕЙШЕЕ !!! Действительно нужная вещь!!! Жирный +
0
mr.Z mr.Z 12 лет назад #
При тестировании данного компонента назрел вопросик!
Вот изображение на нем 2 варианта альтернативного URL
При первом варианте страница получается третьего уровня вложенности,
При втором варианте 2 уровня вложенности
Я правильно это понимаю? или же ошибаюсь?
(Компонент доска объявлений)
0
Марат Марат 12 лет назад #
mr.Z, это вопрос скорее к сеошникам, коим я не являюсь. Вкратце попробую объяснить, что знаю. Возможно не совсем точно.
Уровень вложенности - это немного другое. Вложенность - это количество кликов от главной, пока не откроется нужная страница. Поэтому при обоих вариантах будет 2-й уровень вложенности. Но всё же поисковики лучше реагируют, если ключевик в урл расположен ближе к началу(в идеале поддомен - ключевик.домен.ру ). Поэтому второй вариант лучше. Но тут есть один маленький нюанс. Если мы так задаем урл(не указывая board), то в дальнейшем исключается создание в корневом разделе статьи с урл-ом nedvigimost. Потому как мы теряем board. И если даже мы создадим статью с названием "Недвижимость", то если перейти по его урлу, мы попадем на /board/nedvigimost. Статья будет недоступна.
0
Man Man 12 лет назад #
Урл статьи в данном случае будет sait.ru/nedvigimost.html а ссылка на раздел доски объявлений будет sait.ru/nedvigimost - Это разные ссылки будут, так что ничего это не исключает.
0
Марат Марат 12 лет назад #
Точно. Спасибо за подсказку. Через силу писал, в глазки хоть спички вставляй.
Но всё же нельзя будет создать раздел "Недвижимость" )))
0
Man Man 12 лет назад #
Можно будет.
Слово недвижимость можно транслитирировать разными способами:
1. nedvigimost
2. nedvizhimost
+3
AlexSF AlexSF 12 лет назад #
Сегодня проверил компонент на совместимость с InstantCMS 1.10.
УРАаааааа у меня всё работает.
Для полного "феншуя" понадобилось перекодировать в UTF-8 только один файл:
\admin\components\seo_page\backend.php

ОГРОМНОЕ СПАСИБО тебе Марат
+3
AlexSF AlexSF 12 лет назад #
и теперь, перед установкой на чистую InstantCMS 1.10, в своих архивах нашёл этот компонент и
перекодировал его весь в UTF-8. Единственный файлом где понадобилось кроме мышки использовать
ещё и клавиатуру был С:\SEO_PAGES_V.1.1.1\components\seo_page\install.sql
ENGINE=MyISAM DEFAULT CHARSET=cp1251;
заменил на
ENGINE=MyISAM DEFAULT CHARSET=utf8;
0
afinskiy afinskiy 11 лет назад #
подскажите на 1.10.1 будет работать?
0
Dorimen Dorimen 11 лет назад #
Ну что, компонент работает нормально? Смысл в нем есть?
0
Dim@sik Dim@sik 11 лет назад #
Личтно для меня - этот компонент просто помог ) и всё работает нормально и индексируется на ура
+2
ermakover ermakover 11 лет назад #
Кто-нибудь пробовал на на 1.10.2 компонент работает?
0
Apsent Apsent 10 лет назад #
на версии 1.10.4 не работает(( при включении плагина все вложенные страницы просто выдают белый лист. В настройках ничего не менял не добавлял, просто при включении плагина такая беда. Подскажите что можно зделать, если конечно это возможно для версии 1.10.4
0
Старый балбес Старый балбес 10 лет назад #
Перекодируйте файлы в UTF и замените одну строку в файле.plugins/p_seo_page/plugin.php
Код PHP:
  1. public function execute($event, $item){
заменить на
Код PHP:
  1. public function execute($event='', $item=array()){
0
Марат Марат 10 лет назад #
А более новую версию для icms1.10.3 пробовали?
На 1.10.4 тоже должно работать.
0
Apsent Apsent 10 лет назад #
Скачал новую версию и все заработало)
0
Gesser Gesser 9 лет назад #
Здравствуйте! Неужели я нашел эту тему dance Как же SEO pages упростит мне жизнь. А на 2.1.1 ставить можно?

Еще от автора

Фильтр "Вставка модуля" v 1.0.0
Приветик! Давненько что-то я ничего не писал ) Не знаю было это или не было, вчера увидел темку, решил сделать немного по-другому. Вещь то нужная.
PHP классы для работы с VK API и с API Яндекс Метрики
Доброго времени суток, коллеги! Выкладываю два класса: -для работы с API Вконтакте; -для работы с API Яндекс Метрики.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.