weranda
@weranda

Есть в природе модуль перелинковки для MODx Revolution?

Приветствую.
Есть ли расширение для MODx для перелинковки содержимого материалов, где можно было бы указать искомый текст и замену к нему типа:

задать слово/фразу для поиска в материале: MODx
задать ссылку для слова/фразы: site.ru
сколько раз использовать на странице: 2

После чего расширение ищет в БД нужные слова/фразы и добавляет к ним ссылку указанное количество раз на странице.

Искал в сети что то похожее, но все что нашел - доморощеные негодные расширения.
  • Вопрос задан
  • 751 просмотр
Пригласить эксперта
Ответы на вопрос 2
Realetive
@Realetive
MODX Ambassador России, самозванный БЭМ-евангелист
weranda
@weranda Автор вопроса
Вот код:
<?php
include_once (MODX_ASSETS_PATH .'components/xcontent/xcontent.config.php');

/* @var modX $modx */
/* @var modResource $resource */

//read text
$content = $modx->resource->get('content');
// check config
// $disable = $modx->resource->getTVValue(23);
$disable = false;
if(!isset($REG) || $disable) { print $content; return '';}
$arr = explode("\n", $content);

// Settings
define(DEBUG, 0);
define(SKIP_LINES, 0);
define(LINKS_LIMIT, 2);


if(DEBUG) print "<pre>";
// Начинаем разбор
$links=0;
$str_num=1;
foreach($arr as $str)
{
    $res=0;
    $i=0;

    // Пропускаем строки уже содержащие ссылки или картинки
    $skip=0;
    if(preg_match('/<a.*?>/', $str)) $skip=1;
    if(preg_match('/<img.*?>/', $str)) $skip=1;

    // Также пропускаем первую строку и если лимит ссылок уже достигнут
    if($links < LINKS_LIMIT && !$skip && $str_num>SKIP_LINES)
    {
        foreach($REG as $reg)
        {
            $res = preg_match($reg, $str, $match);
            if($res==0) {  $i++; continue; }

            if(DEBUG) print "\n -------------------- \n(i=$i) "."Str: ".$str."\n";;

            if($res)
            {
                if(DEBUG) print "$links) Found: ".$match[1]."\n";

                // Replace
                //$tag = "<a href='$LINK[$i]'>$match[1]</a>".$match[2];
                $tag = "<a href='$LINK[$i]'>$match[1]</a>";
                $str = preg_replace($REG[$i], $tag, $str, 1);
            }
            $links++;
            if(DEBUG) print "links = $links\n";
            break;
        }
    }

    if(DEBUG) print ">> ";
    //print $str."\n";
    print $str;
    $str_num++;
}
/**/
if(DEBUG) print "</pre>";


На знаю что, где и как поменять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы