PDA

Показать полную графическую версию : Модификация скрипта


venuko
09-02-2009, 13:48
Ребята, плиз, подскажите как изменить данный скрипт:

<style>

p {
font-family: Arial;
font-size: 14px;
}

a.ssilka1 {
color: #ff0000;
text-decoration: underline;
}

a.ssilka1:hover {
color: #ff0000;
text-decoration: none;
}

a.ssilka2 {
color: #33cc00;
text-decoration: underline;
}

a.ssilka2:hover {
color: #33cc00;
text-decoration: none;
}

a.ssilka3 {
color: #ff0099;
text-decoration: underline;
}

a.ssilka3:hover {
color: #ff0099;
text-decoration: none;
}

</style>

<?php


@setlocale(LC_CTYPE, 'ru_RU.CP1251');


//для ссылок внутри статей
$words=array(
'болезни',
'болезнь',
'болезнью',
'болезнями',
'болезней',
'выделяем любое словосочетание',
'Одна большая фраза',
'ракета'
);
$open_tags=array(
'<a class="ssilka1" href="modules.php?name=page">',
'<a class="ssilka1" href="modules.php?name=page">',
'<a class="ssilka1" href="modules.php?name=page">',
'<a class="ssilka1" href="modules.php?name=page">',
'<a class="ssilka1" href="modules.php?name=page">',
'<a class="ssilka2" href="modules.php?name=page2">',
'<a class="ssilka3" href="modules.php?name=page3">',
'<a class="ssilka3" href="modules.php?name=page3">'
);
$close_tags=array(
'</a>',
'</a>',
'</a>',
'</a>',
'</a>',
'</a>',
'</a>',
'</a>'
);

function highlight_first($text, $words, $open_tags, $close_tags) {
$arReplace = array();
for($i=0; $i<count($words); $i++) {
$words[$i] = "/\b(".preg_quote($words[$i]).")\b/i";
$arReplace[]= $open_tags[$i]. '\1'. $close_tags[$i];
}
$text = preg_replace($words, $arReplace, $text, 1);
return $text;
}

$text = "Пример текста и болезни и потом ещё всякий текст и бац болезнь. Потом дальше болезнью. Болезнями разными. Много всяких плохих болезней. Аага точно болезни. Возможно в тексте нужно будет выделяем любое словосочетание! Здесь будет ещё Одна большая фраза. И ещё полетит в космос ракета. Ракета это круто :)";
$text=highlight_first($text,$words,$open_tags,$close_tags);

echo "<br><p><b>Сейчас результат такой:</b></p>";

echo "<p>$text</p>";

echo "<br/><hr>";

echo "<p><b>Должен быть результат таким:</b></p>";

echo "<p>Пример текста и <a class=\"ssilka1\" href=\"modules.php?name=page\">болезни</a> и потом ещё всякий текст и бац болезнь. Потом дальше болезнью. Болезнями разными. Много всяких плохих болезней. Аага точно болезни. Возможно в тексте нужно будет <a class=\"ssilka2\" href=\"modules.php?name=page2\">выделяем любое словосочетание</a>! Здесь будет ещё <a class=\"ssilka3\" href=\"modules.php?name=page3\">Одна большая фраза</a>. И ещё полетит в космос ракета. Ракета это круто :)</p>";

?>

Сейчас скрипт выделяет (оборачивает ссылкой) самые первые по тексту разные словоформы, повторения не выделяет, а нужно чтобы ещё не выделял подряд разные словоформы с одинаковой ссылкой.

Подскажите как модифицировать код, чтобы получить результат как показано в скрипте под чертой?

venuko
09-02-2009, 14:24
ни кто не знает :(

Sham
09-02-2009, 14:57
Попроще не можете объяснить? Никто не понял, чего надо то...

venuko
09-02-2009, 15:52
Попроще не можете объяснить? Никто не понял, чего надо то... »

ну вот страница пример, сверху что щас скрипт делает, а под чертой что должно быть, после модификации существующего скрипта: http://saveplanet.su/text/text.php

Sham
09-02-2009, 17:04
for($i=0; $i<count($words); $i++) {
$words[$i] = "/\b(".preg_quote($words[$i]).")\b/i";
$arReplace[]= $open_tags[$i]. '\1'. $close_tags[$i];
}
$text = preg_replace($words, $arReplace, $text, 1); »
там надо с переменными поиграть, и preg_replace внутри цикла делать...

for($i = 0; $i < count($words); $i++)
{
$words = "/\b(".preg_quote($words[$i]).")\b/i";

$arReplace = $open_tags[$i]. '\1'. $close_tags[$i];

if(@$prev_tag == $open_tags[$i] && @$is_replaced) continue;

$prev_text = $text;

$text = preg_replace($words, $arReplace, $text, 1);

$is_replaced = ($prev_text != $text);

$prev_tag = $open_tags[$i];
}

venuko
09-02-2009, 18:00
хорошо, но ещё подумаю :)




© OSzone.net 2001-2012