Как изменить xfsearch в DLE DataLife Engine.

Доброго времени суток дорогие читатели блога Мои тараканы!

xfsearch в DataLife Engine

xfsearch в DataLife Engine

Сегодня, впервые, в моем блоге пойдет речь о системе управления сайтом DataLife Engine (DLE). Точнее не о самом DLE а конкретно о выводе дополнительных полей и различных способа изменения xfsearch в URL на что то более подходящее. Для тех, кто не знаком с этим движком, написанное ниже будет совершенно непонятным, но для тех, кто в теме, данный пост, думаю, будет даже очень полезен. Хотя, возможно, и тот, кто привык работать с WordPress найдет для себя что ни будь интересное.

Пост получился довольно громоздкий, поэтому я сделал оглавление для навигации.

1. Что такое дополнительное поле.
2. Что такое перекрёстные ссылки в доп. полях.
3. Меняем xfsearch в URL страниц перекрёстных ссылок в доп. полях на название доп поля. + страницы пагинации.
4. Меняем метатег TITLE на страницах тегов и дополнительных полей
5. Как разместить текст описания на страницах доп. полей в DLE
6. Модуль для SEO оптимизации доп. полей в DLE (похожий на TagFace)

Давно я не писал таких объемных статей, в принципе, я вообще давно не писал, а тут ТАКОЕ. Последний раз что-то подобное было это пост о восстановлении Хрома а до этого советы по восстановлению данных после переустановки Винды. Надеюсь мой мануальчик вам пригодится.

Что такое дополнительное поле в DataLife Engine

И так, для начала давайте разберемся, что собой представляют дополнительные поля в DLE. Дополнительными полями можно назвать расширение для более удобного добавления материалов на сайт. Если заглянуть на страничку добавления новости, мы обнаружим, что там уже существует несколько полей. Это заголовок, дата, категория, краткая новость, полная новость и т.д.

Возможности данного движка предусматривают добавление собственных полей. Возьмём, к примеру, какой ни будь киносайт (DLE больше всего подходит для создания киносайтов сайтов). Как я уже говорил, у нас уже есть краткое описание (выводится в ленте новостей) и полное описание на полной странице материала. Но кроме описания мы хотим указать режиссера фильма, актёрский состав, год выпуска и сделать это так чтобы эти строки визуально отличались от всего описания. Для этого и существуют дополнительные поля. Мы создаем дополнительное поле, вставляем его в шаблон, форматируем нужным нам образом (применяем стили) а в админке только подставляем свои значения для каждого материала. Таким образом, мы избавляем себя от ввода и форматирования однотипной информации.

Перекрёстные ссылки в доп. полях

(К оглавлению ⇑)
Перекрёстные ссылки в доп полях это почти то же самое что, всем известные, теги, только генерируется полуавтоматически. Как это работает? Если в настройках поля указать значения доп. полей будут выводится в виде ссылок на показ других публикаций, которые имеют такие же значения. Например, если в поле режиссер (берём к примеру всё тот же кино-сайт) вы укажите Леонид Гайдай, то на сайте эта информация отобразится в виде ссылки на ленту новостей которые имеют такое же значение, то есть на фильмы где вы в поле «режиссер» указали слово «Гайдай».

Меняем xfsearch в URL страниц перекрёстных ссылок в доп. полях на название доп поля. + страницы пагинации

(К оглавлению ⇑)
Голову сломал пока определился как правильно сформулировать заголовок :). Но все не так пугающе, как можно подумать прочитав подзаголовок. Суть в следующем: Например, на нашем киносайте есть доп поле «год выхода» или «режиссер фильма» (или оба этих поля одновременно) и вы для него используете перекрёстные ссылки, то URL страницы на которой выводятся записи по доп. полю имеют следующий вид:

www.site.ru/xfsearch/2015 или www.site.ru/xfsearch/Леонид+Гайдай

Вот это самое xfsearch портит внешний вид URL, к тому же и для года выхода и режиссера фильма будет один путь в URL. Получается как какая-то непонятная категория — xfsearch. Согласитесь это не совсем правильно.

Выход — заменить xfsearch на название доп поля. Например, если для вывода года выпуска фильма доп поле у вас имеет название year а для режиссера снявшего этот фильм rejiser, то заменив xfsearch на названия этих полей вид URL будет следующий:

www.site.ru/year/2015 и www.site.ru/rejiser/Леонид+Гайдай
Как это реализовать? Если погуглить (странное слово, я например гуглю в Яндексе :)) найдется масса сайтов (практически все из ТОП 10 выдачи), которые, ссылаясь друг на друга, описывают один и тот же хак. Хак рабочий, но есть одно НО. Если у вас, поэтому доп. полю есть много статей (например, фильмов 2015 года) то, скорее всего у вас появятся страницы пагинации. И на страницах пагинации название доп поля в URL сменится на стандартное xfsearch.

www.site.ru/xfsearch/2014/page/2/

Погуглив немного глубже (немного это слабо сказано) я нашел хак, который будет нормально работать и на страницах пагинации. Вот сам хак:

Открываем файл engine.php и находим следующий код:

$url_page = $config['http_home_url'] . "xfsearch/" . urlencode ( str_replace("'", "'", $xf) );

Заменяем на:

$url_page = $config['http_home_url'] . urlencode($_GET['xn']) . "/" . urlencode ( str_replace("'", "'", $xf) );

В файле .htaccess ищем

RewriteRule ^xfsearch/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^xfsearch/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]

Ниже вставляем:

RewriteRule ^(название доп поля1, нап. year)/([^/]*)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2 [L]
RewriteRule ^(название доп поля1, нап. year)/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2&cstart=$3 [L]
RewriteRule ^(название доп поля2, нап. rejiser)/([^/]*)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2 [L]
RewriteRule ^(название доп поля2, нап. rejiser)/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2&cstart=$3 [L]

Ссылка на источник хака.

Хорошо продумайте название для доп.поля, чтобы оно нормально смотрелось в URL. Будьте внимательны! Если вы начали наполнять сайт и в процессе работы решили поменять название доп. поля все данные которые были введены ранее будут утрачены!

Меняем метатег TITLE на страницах тегов и дополнительных полей

(К оглавлению ⇑)
Скажу сразу данный хак подойдет не всем. Его удобно использовать если у вас на сейте только одно дополнительное поле (например, всё тот же, режиссер) а для тегов к фильму вы используете один параметр (например, если у вас все-таки киносайт, вы используете год выхода на экран) — этот вариант подойдет замечательно.

Для того чтобы поменять Title на страницах тегов нужно открыть файл engine/engine.php, найти строки:

elseif ($do == 'tags') $nam_e = stripslashes($tag);
elseif ($do == 'xfsearch') $nam_e = $xf;

И заменить их на свой вариант, примерно так:

elseif ($do == 'tags') $nam_e = "Фильмы ".$xf" года";
elseif ($do == 'xfsearch') $nam_e = "Режиссер фильма ".$tag.;

Я, например, использовал его только для страниц тегов.

elseif ($do == 'tags') $nam_e = 'Список фильмов с тегом "'.$tag.'"';

Теперь у меня на сайте тайтл страницы тега, например, «приключения» выглядит так:

Список фильмов с тегом "приключения">> Site.RU - смотрите онлайн лучшие фильмы в интернете!
вместо
приключения>> Site.RU - смотрите онлайн лучшие фильмы в интернете!

Как разместить текст описания на страницах доп. полей в DLE

(К оглавлению ⇑)
Скажем на странице, где выводятся новости по xfsearch Леонид Гайдай (мы уже знаем, как заменить xfsearch на rejiser),мы решили вывести небольшой текст, повествующий о жизни и творчестве этого великого кино художника.

Открываем файл «templates.class.php » находится он по адресу «/engine/classes»

Находим в нем:

$this->copy_template = $this->template;
$this->template_parse_time += $this->get_real_time() - $time_before;

ВЫШЕ этого вставляем:

if( strpos( $this->template, "{request=" ) !== false or strpos( $this->template, "[request=" ) !== false ) {
        preg_match_all("#[\{\[]request=['"](.+?)['"]#is",$this->template,$matchs,PREG_PATTERN_ORDER);
        $matchs = ((isset($matchs[1]) and is_array($matchs[1]))?$matchs[1]:array());
        $matchs = array_unique($matchs);
        foreach($matchs as $match){
            $vmatch = explode('=',$match);
            $amatch = explode('->',$vmatch[0]);
            $value = $_REQUEST;
            foreach($amatch as $imatch)
                $value = (($value and isset($value[$imatch]))?$value[$imatch]:false);
            if((isset($vmatch[1]) and (is_array($value) and in_array($vmatch[1],$value) or $vmatch[1]==$value)) or (!isset($vmatch[1]) and $value)){
                $this->template = preg_replace ( "#\{request=['"]{$vmatch[0]}['"]\}#is", (is_array($value)?'array':$value), $this->template );
                $this->template = preg_replace ( "#\[request=['"]{$vmatch[0]}['"]\](.+?)\[/request\]#is", '\1', $this->template );
                $this->template = preg_replace ( "#\[request=['"]{$vmatch[0]}={$vmatch[1]}['"]\](.+?)\[/request\]#is", '\1', $this->template );
            } else {
                $this->template = preg_replace ( "#\{request=['"]{$vmatch[0]}['"]\}#is", '', $this->template );
                $this->template = preg_replace ( "#\[request=['"]{$vmatch[0]}['"]\](.+?)\[/request\]#is", '', $this->template );
                $this->template = preg_replace ( "#\[request=['"]{$vmatch[0]}={$vmatch[1]}['"]\](.+?)\[/request\]#is", '', $this->template );
            }
        }
    }
    if( strpos( $this->template, "{request}" ) !== false) {
        var_dump($_REQUEST);
        $this->template = str_replace('{request}', '', $this->template );
    }

Теперь открываем файл шаблона main.tpl

В месте где у вас должен быть текст, нужно вставить:

[aviable=xfsearch]
[request="xf=Леонид+Гайдай"]
Тут текст о великом Леониде Гайдае
 [/request]
[/aviable]

Если вы хотите что бы текст был только на первой странице и не отображался на страницах пагинации, то вам нужно вставить такой код:

[aviable=xfsearch]
 [page-count=1][request="Леонид+Гайдай"]
Тут текст о великом Леониде Гайдае
 [/request][/page-count]
[/aviable]

Учтите! Наверняка код [aviable=xfsearch] [/aviable] в вашем шаблоне уже существует. Вам только остается его найти и вставить внутрь оставшуюся часть кода.

Модуль для SEO оптимизации доп. полей в DLE

(К оглавлению ⇑)
И наконец, модуль, который выполняет все, что описано в предыдущих двух пунктах и не только. Модуль очень похож на модуль TagFace от Алаича. Можно сказать больше, он не просто похож — он выполняет все те действия с доп. полями, что и TagFace с тегами. Но вряд ли вы найдете такой модуль в интернете. Я сам долго копал пока нашел его. И я даже заплатил за него деньги (небольшие, но всё же). Я предлагаю получить данный модуль почти бесплатно.

https://yadi.sk/d/N7M4cLwvhEi7h

Вы можете следить за обновлениями блога в Twitter , RSS или по почте!

С уважением, Мышак Пётр!