Как не пропускать ссылки для плагина внешних ссылок
15.01.2011Голосование
| Тип | Ошибка |
| Состояние | Исправлено |
| Приоритет | Высокий |
| Версия | 4.12 |
| Система | * |
| Воспроизводимость | Нет |
| Автор | Блоголётчик |
| Исполнитель | Блоголётчик |
Что вписать в externallinks.plugin.php
чтобы под фильтр не попадали внешние ссылки которые я хочу опубликовать с rel="trusted" к примеру, чтобы каждый раз не лазить в полную новость и не редактировать после публикации чтоб открыть
ссылки.
public function filter(&$content) {
if(!preg_match_all('/<a\s<em>.</em>?href\s<em>=\s</em><a
href="[^"\'>]*">\'"</a>.<em>?>(.</em>?)<\/a>/i', $content, $links)) return;
$redir = litepublisher::$site->url . '/externallink.htm' . litepublisher::$site->q . 'id=';
$external = array();
foreach($links[1] as $num => $link) {
if (isset($external[$link])) continue;
if (!strbegins($link, 'http', 'ftp')) continue;
if (strbegin($link, litepublisher::$site->url)) continue;
$id = $this->add($link);
$external[$link] = $redir . $id;
}
<pre><code>foreach ($external as $src => $dst) {
$content = str&#95;replace(sprintf('"%s"', $src), sprintf('"%s"', $dst), $content);
$content = str&#95;replace(sprintf("'%s'", $src), sprintf("'%s'", $dst), $content);
}
}
И кстате мой запрос на фичи кудато пропал в тикетах , уже недели 2 как просил сделать плагин популярных записей с выборкой из бд по количеству комментариев (количество просмотров то у нас вроде не пишется в базу), тебе на него максимум минут 10 нада, а думаю многие будут благодарны.
RSS комментарии к этой записи
Рубрики: Ошибки
← Ранее Скрипты и новый лоадер
Позже Размещение и удаление ссылок →
Комментарии (7) на запись “Как не пропускать ссылки для плагина внешних ссылок”
Оставить комментарий
Все таки зря цитировал текст плагина, достаточно добавить еще одну (или сколько надо) после строки
if (strbegin($link, litepublisher::$site->url)) continue;
для тебя это будет примерно такая строка (проверить естественно):
if (strpos($link, 'rel="trusted"')) continue;
Рекомендую скопировать папку externallinks в папке plugins под другим именем и отредактировать все, что нужно для нового плагина, так как после обновления все твои изменения будут потерты - не забывай про это. Практика править фильтрованный текст крайне плохая, настоятельно рекомендую ее не пользоваться
Или отдельный пункт меню и страницу в админке где вводиш в 1 поле ид поста в другое текст постового со ссылкой.
Можно ссылку и в виджет ставить но как реализовать вывод для каждой страницы свою ссылку в виджете, хотя наверно можно плагином наподобии внешних ссылок, только не прятать их.
Есть и скрипты которые добавляют постовые автоматом вот тока как прикрутить, и какой принцып действия их я пока не разбирался.
Щас все силы на долимонивания шаблона (купил домен, и хочу сразу хорошую стабильную версию блоголета с новым шабом на него)
$post->meta->myprop = 'some value';
Чтото не работает, раньше небыло времени проверить а вот щас попробовал всеравно переделывает ссылки
public function filter(&$content) {if(!preg_match_all('/<a\s<em>.</em>?href\s<em>=\s</em><a href="[^"\'>]*">\'"</a>.<em>?>(.</em>?)<\/a>/i', $content, $links)) return;
$redir = litepublisher::$site->url . '/external.htm' . litepublisher::$site->q . 'id=';
$external = array();
foreach($links[1] as $num => $link) {
if (isset($external[$link])) continue;
if (!strbegins($link, 'http', 'ftp')) continue;
if (strbegin($link, litepublisher::$site->url)) continue;
if (strpos($link, 'rel="trusted"')) continue;
$id = $this->add($link);
$external[$link] = $redir . $id;
}
что может быть неправильно может кавычки нада было писать подругому? может так?
if (strpos($link, 'rel=&quot;trusted&quot;')) continue;Сейчас заметил strbegins - надо strbegin, поправил висходнике. У тебя все правильно, для трассироввки поставь строку
echo "$link<br>\n";
Может работать, а может нет - выяснить в чем причина и сделать как тебе надо полностью твоя задача. Я указал алгоритм, а ввот как ты его реализуешь уже твоя проблема. Знаешь, у мменя тоже не все написанные скрипты работают с первого раза, приходится отлаживать, тестировать и прочее. Для отладки фильтра контента могу посоветовать скрипт (сохранить в отдельный файл):
<?php
define('litepublisher_mode', 'xmlrpc');
include('index.php');
echo "</pre>\n<pre>\n";
$s = file_get_contents('post.txt');
$filter = tcontentfilter::instance();
$s = $filter->filter($s);
dumpstr($s);
в файл post.txt поместить текст поста для фильтрования в кодировки utf-8.
Еслитекст поста не меняется при редактировании, то фильтр не запускается - если редактируешь в админке, то вставь внутри текста пробел например, чтобы фильтр отработал. Фильтр может быть запущен в фоновом режиме при увеличении номера ревизии