Вход • Регистрация

модуль внутренней перелинковки

  • 24 мая 2011 г.
  • очень не хватает такого модуля и думаю не только мне: чтобы можно было линковать прямо из текста по заданным анкорам.
    планируется ли его создание?
    можно ли его заказать за отдельную плату? думаю, если всем миром скинемся то сумма хорошая получится.
    • 24 мая 2011 г.
    • Есть уже такой модуль. Тестируем. Скоро в пакете будет
      • 24 мая 2011 г.
      • прошу учесть ряд моментов в модуле:
        1. страницы не должны ссылаться друг на друга
        2. страница А может ссылаться на страницу Б только один раз
        3. на обычном тарифе виртуального хостинга, будет ли модуль справляться с нагрузкой на сайте с 10 000 страниц если с каждой страницы будет идти 8 ссылок?
        • 24 мая 2011 г.
        • Модуль есть и уже завершен в базовом функционале. А уж полировать его под собственные узкие нужды, думаю, каждый должен сам
  • 11 июня 2011 г.
  • А где этот модуль? Как к нему получить доступ? В админке не нашел
  • 04 июля 2011 г.
  • Объясните в чем разница в использовании данного модуля и его преимущество, от ручного способа вставки ссылок по ключевым словам, на другие страницы, дабы продолжить кольцо ссылок?
    • 06 июля 2011 г.
    • Разница в том, что ручной способ - ручной, а в модуле - автоматизированный.
      Пока это просто глобальная функция с файлом с ключевиками. Пропускаете через эту функцию, например $row["text"] из модуля вопрос-ответ, и по всем текстам на сайте если встречаются ключевики в вопросах-ответах пользователей, то они превращаются в ссылки на нужные внутренние страницы.
      • 23 октября 2011 г.
      • В новой версии реализовано?
        • 29 октября 2011 г.
        • Действительно - реализован ли данный модуль??
          Вопрос по шаблонам: все шаблоны под 4.5 функционируют или надо что-нибудь править?
          Планируются ли новые?
          • 01 ноября 2011 г.
          • Да не модуль это, а глобальная функция. Завтра Гарик напишет, как она работает
  • 03 ноября 2011 г.
  • Теперь доступен этот функционал для всех
    Скачивайте самый последний пакет diafan.CMS и берите от туда файл /includes/core.php

    В корне сайта создайте файл keywords.php
    Такого содержания

    Код

    <?php
    /**
    * Diafan.CMS
    *
    * @author diafan.ru
    * @version 4.5
    * @license http://cms.diafan.ru/license.html
    * @copyright Copyright (c) 2003-2011 OOO "Диафан". (http://diafan.ru)
    */

    if (! defined('DIAFAN'))
    {
    include(dirname(dirname(__FILE__)).'/includes/404.php');
    }

    $keywords = array(
    'Приходите' => '/',
    'час' => 'http://diafan.ru/'
    );


    В нужном вам модуле в любом месте хоть в module.view.php хоть в module.model.php, вызывайте функцию $this->diafan->key_values($text).
    Она возвращает измененный текст.

    Для примера возьмем модуль "Новости" файл /modules/news/news.view.php шаблон вывода новости функция id() строка 479
    Код

    //вывод анонса новости
    if ($row['anons'])
    {
    echo '<div class="news_anons">'.$this->diafan->key_values($row['anons']).'</div>';
    }
    • 03 ноября 2011 г.
    • Гарик забыл написать как работает функция в принципе.
      Есть глобальная функция, называется key_values()
      Вызывать ее можно откуда угодно, из любого модуля, из любой функции.
      Эта функция работает в паре с файлом keywords.php, который должен лежать в корне сайта.
      Файл keywords.php представляет из себя просто массив
      Код
      $keywords = array(
      'Ключевик1' => 'http://site.ru/url/',
      'Ключевик2' => '/url2/',
      'Ключевик3' => 'http://site.ru/url3/'
      );

      По умолчанию этого файла в корне нет! Так как функция редко и мало кем используется, файл надо создавать самим.
      Функция делает что: она берет текст и если встречает там ключевики из указанного массива, она меняет их на ссылки на соответствующую страницу.

      То есть, у вас есть сайт по кондиционерам и на нем рубрика "Вопрос-ответ", куда задается куча вопросов по кондиционерам. Вы хотите, чтобы из всех ответов, которые ваш консультант отвечал посетителям, слова "кондиционер" ссылались на главную страницу сайта.
      Тогда идете в файл /modules/faq/faq.view.php, находите функцию id() и там вывод ответа echo $row["text"]; и делаете так:
      Код
      echo $this->diafan->key_values($row["text"]);

      Затем в корне сайта создаете файл keywords.php
      Код
      $keywords = array(
      'кондиционер' => '/',
      'кондиционера' => '/',
      'кондиционеру' => '/',
      'кондиционером' => '/',
      'кондиционеры' => '/',
      'кондиционеров' => '/'
      );

      И все. Во всех ответах на вопросы эти слова автоматически сошлются на главную страницу.

      Так же можете применить к комментариям, которые оставляют пользователи, к форуму, к новостям, а можете к функции show_body(), чтобы вообще все ключевики на сайте ссылалось куда надо.
      • 23 ноября 2011 г. , редакция: 24 ноября 2011 г.
      • Если ссылки с каким-то анкором на какую-то страницу я захочу убрать, то мне достаточно будет убрать соответствующую строчку из массива?
        И подскажите что и в каком файле нужно прописать, чтобы ссылки проставлялись из текста обычных страниц.
        • 24 ноября 2011 г.
        • Конечно. В том-то и удобство, что файл открыли и вот он список ключевиков всех перед глазами. В текстовике поправили, сохранили - готово. Убрали строку, ссылки пропали, конечно.
        • 24 ноября 2011 г.
        • Для текста в сайте - это тег show_body
          Функция show_body() в /includes/function.php
          Строка 71 пишете
          Код
          $text=$this->diafan->key_values($text);

          Т.е. дополнительно переменную text пропускаете через эту функцию.
          • 24 ноября 2011 г.
          • Сделал все как описано выше. Эффекта нет. Текст который встречается,на сайте - просто текст. Делал на локалке - может поэтому? После вставки $text=$this->diafan->key_values($text); - контент с главной вообще улетел непонятно куда. Может что не так в keywords.php?
          • 24 ноября 2011 г.
          • У меня версия 4.3. Вот функция для этой версии:
            Код

            public function show_body()
            {
            if(! $this->diafan->title_no_show)
            {
            echo '<h1>'.($this->diafan->titlemodule ? $this->diafan->titlemodule : $this->diafan->name).'</h1>';
            }

            if(! $this->diafan->show && ! $this->diafan->cat && ! $this->diafan->step && (! isset($_GET["catid"]) || $this->diafan->module != "shop"))
            {
            $this->view->get_function_in_theme($this->diafan->text);
            }

            $this->view->module->show_module();

            return TRUE;
            }


            В каком месте нужно прописать эту строчку -
            Код
            $text=$this->diafan->key_values($text);
            • 25 ноября 2011 г.
            • Смотрите:
              Код
              $this->view->get_function_in_theme($this->diafan->text);

              это обработка переменной $this->diafan->text для поиска шаблонных тегов вставленных в контент.
              В Вашей версии переменная называется не $text, а $this->diafan->text. Но смысл остается тот же.
              До или после обрабатывайте эту переменную для замены ключевиков на ссылки.
              Код
              $this->diafan->text=$this->diafan->key_values($this->diafan->text);
              • 25 ноября 2011 г. , редакция: 25 ноября 2011 г.
              • Не хочет работать у меня.
                Файл core.php из дистрибутива 4.5 в папку include залил. Keywords.php в корень тоже залил.
                В таком варианте:
                Код
                $this->view->get_function_in_theme($this->diafan->text);
                $this->diafan->text=$this->diafan->key_values($this->diafan->text);

                ссылки не появляются

                А в таком:
                Код
                $this->diafan->text=$this->diafan->key_values($this->diafan->text);
                $this->view->get_function_in_theme($this->diafan->text);

                статья пропадает.

                Кроме этого с вариантом core.php из дистрибутива 4.5 в панели управления при нажатии на крестик слева от названия страницы, категория не открывается. Меняю core.php на преждний, все нормально начинает работать.
  • 24 ноября 2011 г.
  • Тоже не могу понять,как выглядит результат данного модуля. Текст который встречается из keywords.php - выделяется как ссылка и при клике переход? Или иначе?
    • 25 ноября 2011 г.
    • Идет текст:
      Код
      Бла бла бла ого бла бла

      Если у нас в keywords встречается ключевик "'ого' => '/1/',", то текст станет
      Код
      Бла бла бла <a href="/1/">ого</a> бла бла

      Оформление ссылок зависит от стилей сайта уже.
  • 25 ноября 2011 г.
  • Прилагаю пример keywords.php
    • 25 ноября 2011 г.
    • У меня ноль эффекта. Что сделал на локальном:
      1. function.php после 71 строки $this->view->get_function_in_theme($text); добавил
      $text=$this->diafan->key_values($text);
      2. в корень бросил keywords.php
      3. специально прописал стили для ссылок на главной.
      Итог: на главной в тексте есть ключевики. При просмотре firebugом кода, просто тестк без a href.
      Что не так?
      • 25 ноября 2011 г.
      • Цитата
        Скачивайте самый последний пакет diafan.CMS и берите от туда файл /includes/core.php

        У Вас какая версия CMS? В пакете по умолчанию эта функция только с 4.5.0.8
        В остальных более старых версиях эту функцию надо добавлять.
      • 25 ноября 2011 г.
      • Второй момент: кеш! Производите все эти действия с отключенным кешем!!!
        Настройки сайта - Отключить кеширование.
        • 25 ноября 2011 г.
        • Отключили кеширование, внедрили код, поправили keywords.php, сохранили, убедились, что все работает. Тогда включайте кеширование обратно.
  • 25 ноября 2011 г.
  • Реально сделал все как надо. Не работает. Может денвер гонит? У кого-нибудь на локалке робит?
    • 25 ноября 2011 г.
    • Что не работает? РНР?
      • 26 ноября 2011 г.
      • Ключевики в тексте, не становятся a hrefами.
        • 26 ноября 2011 г.
        • Ребята, признайтесь, это флеш-моб? Как в Крокодиле, когда игрок показывает жирафа и все знают, что он показывает жирафа, кричать ему что угодно, только не жирафа.
        • 26 ноября 2011 г.
        • Функция чувствительна к регистру, склонениям и пробелам вокруг слова. "слон" не выделит "слонами", не выделит "прислониться", не выделит "Слон", не выделит "слон_и_моська"
          • 27 ноября 2011 г.
          • Скачал последний дистрибутив. Проверил в core.php public function key_values($text) есть. Делаю как выше описано. Не работает!
            • 28 ноября 2011 г.
            • Товарищи, может у кого аналогичная проблема. Может добьем.
  • 30 ноября 2011 г.
  • Есть ли такая возможность, чтобы прописав единожды функцию, модуль распространял свое действие на весь контент и на все модули сайта? Или для каждого участка вывода текста в модулях, нужно вызывать функцию $this->diafan->key_values($text)?
    • 06 декабря 2011 г.
    • diafan.CMS использует буферизацию и сжатие страниц.
      Функция ob_start в качестве первого параметра принимает callback функцию, которая будет вызвана при сбросе (отправке) буфера вывода.

      В файле /includes/gzip.php вне класса напишем ее

      Код
      function diafan_output($buffer)
      {
      if (file_exists(ABSOLUTE_PATH.'keywords.php'))
      {
      include_once(ABSOLUTE_PATH.'keywords.php');
      foreach ($keywords as $k => $v)
      {
      $buffer = preg_replace('/([^a-zA-Zа-яА-Я])'.$k.'([^a-zA-Zа-яА-Я])/', '$1<a href="'.$v.'">'.$k.'</a>$2', $buffer);
      }
      }
      return ob_gzhandler($buffer, 5);
      }


      и перепишем функцию init_gzip таким образом чтобы везде она вызывалась ob_start('diafan_output');.

      Но важно понимать, что так мы будем заменять не только текст в нужных нам блоках, но даже и title и meta тегах.
      Что бы этого избежать можно переписать регулярное выражение так, чтобы оно работало только в пределах тега body.
      • 06 декабря 2011 г.
      • А как переписать регулярное выражение так, чтобы оно работало только в пределах тега body?
      • 07 декабря 2011 г. , редакция: 07 декабря 2011 г.
      • Если в Функции show_body() в /includes/function.php
        Строка 71 прописать Код $text=$this->diafan->key_values($text); - то это и есть действие в пределах тега body. ?
        • 07 декабря 2011 г.
        • Конечно!
          В общем-то попробовать - дело пары минут. Быстрее, чем на форум идти и ответа ждать полдня
          • 08 декабря 2011 г.
          • Что-то не получается. Мои действия:
            1. в файле /includes/gzip.php прописал
            Код
            function diafan_output($buffer)
            {
            if (file_exists(ABSOLUTE_PATH.'keywords.php'))
            {
            include_once(ABSOLUTE_PATH.'keywords.php');
            foreach ($keywords as $k => $v)
            {
            $buffer = preg_replace('/([^a-zA-Zа-яА-Я])'.$k.'([^a-zA-Zа-яА-Я])/', '$1<a href="'.$v.'">'.$k.'</a>$2', $buffer);
            }
            }
            return ob_gzhandler($buffer, 5);
            }

            2. gzip.php строка 85,96,105 прописал ob_start('diafan_output');
            3. show_body() в /includes/function.php
            строка 71 прописал Код $text=$this->diafan->key_values($text);
            Ни какой реакции. Что не так?
            • 08 декабря 2011 г.
            • Это к Гарику тогда. Я лично вообще не знаю, зачем так извращаться...
  • 10 августа 2012 г.
  • Цитата
    Сделал все как описано выше. Эффекта нет. Текст который встречается,на сайте - просто текст.

    Цитата
    У меня ноль эффекта.

    Цитата
    Ключевики в тексте, не становятся a hrefами.

    Слушайте, сейчас сам бился часа полтора, не работало. Копался-копался, начал трассировать - понял в чем проблема!
    Кодировка! Кодировка файла keywords.php! Она должна быть UTF without BOM, как и все файлы CMS. У меня была ANSI и ничего не работало, есессно. Т.к. ключевики брались из файла ромбиками и не находились в тексте. Изменил кодировку, все заработало.
    Это так, на будущее может кому поможет.
    • 31 января 2013 г.
    • Подскажите, куда и что нужно добавить, чтобы перелинковка применялась только к телу статьи и телу новости (здесь про страницы с прикрепленными этими модулями).
  • 11 апреля 2013 г.
  • В версии 5.2, захожу в админку, далее раздел "перелинковка", кликаю добавить, вписываю слово, ссылку, ставлю галку "показывать на сайте", жму сохранить, перегружаю страницу, ссылки нет
    • 11 апреля 2013 г.
    • Если добавленное слово в модуле с заглавной, а в тексте с прописной буквы - ссылка не ставиться

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум