Ребята, помогите написать функцию отлова внешних ссылок.

Т.е. нужно чтобы внешние ссылки открывались в новом окне или с предупреждением, а внутренние открывались как положено..

Комментарии

  • 8 ноя 2012 01:56

    <a href="file.html" target="_blank" ....

  • 8 ноя 2012 02:23

    Да это сильно просто. А если учесть что ссылок куча и каждую в ручную прописывать - это геморой.
    Мне не тег, а функция нужна. умеющая определить внешнюю ссылку и вставить в нее этот тег.
    Движок написан на PHP

  • 8 ноя 2012 02:25

    вы хоть распишите как выглядит структура данных или небольшой пример. кто знает что там за движок? какой фреймворк итд...

  • 8 ноя 2012 02:42

    нужно примерно следующее:
    -----------------------------------------

    $config['home'] = http://odnoklassniki.ru;


    if (file.html == $config['home'])

    {

     echo ' <a href="file.html"> *** </a> ' ;

    } else {

     echo ' <a href="file.html" target="_blank"> *** </a> ' ;

    }

  • 8 ноя 2012 02:51

    или же вот так

    function url_replace($сс) {

    if( !isset($сс) ) {

    return '<a href="'.$config['home'].'act=b&id=70&start=0&">'.$сс.'</a>' ;

    } else {

    return '<a href="'.внешняя.'" target="_blank">'.ссылка.'</a>' ;        

    }}

  • 8 ноя 2012 02:53
    можете сделать с помощью стринг-функцый, вот небольшой пример. я не тестировал, но думаю что пойдет: <?php

    $config = array();

    $config['home'] = 'index.html';

    $config['test'] = 'http://odnoklassniki.ru';

    foreach ($config as $key => $href) {

    $target = (strpos($href, 'http://') !== false) ? '_blank' : '_self';

    echo '<a href="' . $href . '" target="' . $target . '">' . $key . '</a>';

    }

    ?>

  • 8 ноя 2012 02:55

    если филтровать ссылки из контента, то здесь поможет regex или дом-объект

  • 8 ноя 2012 03:03

    да проблема еще в том что многие внутренние ссылки начинаются с (http://) и не знаю как сделать чтобы ссылка вида ($config['home']?act=b&id=70&start=0&amp;-)  не считалась внешней.
    Спасибо, попробую прикрутить

  • 8 ноя 2012 03:05

    то что я написал, работает. думаю это то что надо.

  • 8 ноя 2012 03:17

    да, работает. но и некоторые внутренние ссылки в новой вкладке открываются,
    столкнулся еще с проблемой... Делаю дизайн для сенсорных смартфонов. и вот touch-сылки открываются не правильно. Т.Е. и настоящая и открываемая вкладки загружают страницу указанную во внешней ссылке :-D

  • 8 ноя 2012 03:30

    <?php

    $myPage = 'http://my-site.com/';

    $config = array();

    $config['home'] = 'index.html';

    $config['test'] = 'http://odnoklassniki.ru';

    $config['page'] = 'http://my-site.com/page.html';

    foreach ($config as $key => $href) {

    if (strpos($href, $myPage) !== false) $href = str_replace($myPage, '', $href);

    $target = (strpos($href, 'http://') !== false) ? '_blank' : '_self';

    echo '<a href="' . $href . '" target="' . $target . '">' . $key . '</a> ';

    }

    ?>

  • 8 ноя 2012 03:32

    думаю этого хватит. там немого попробуйте, и все получится.

  • 8 ноя 2012 03:42

    Спасибо, пробую.
    пока что только localhost виснет - видимо какая-то переменная повторяется. и файл themes.css и functions  без  (http://) не инклюдятся
    а другим способом можно както определить ?

  • 8 ноя 2012 15:12

    я не могу себе даже представить что там у вас за структура кода. зачем статические файлы как CSS инклудировать? могу дать совет: не стройте свой супер-фреймворк, пользуйтесь готовыми как Zend FW. там уже все есть, и разрабатывать можно гораздо быстрей и с улыбкой на лице ;-)

  • 8 ноя 2012 15:45

    ну начал. Вообще по стандартное схеме: верхушка, тело, ноги. Имеется несколько скинов и вот эти скины иклюдятся и выбирают что на каком скине выводить. примерно так:

    require_once ("../../conf/sessions.php&quot;-);

    require_once (DIR."conf/functions.php&quot;-);

    require_once (DIR."conf/header.php&quot;-);

    include_once (DIR."thm/".$config['themes']."/&quot;-); // Папка скина
    ----------------------------
    Тело
    ----------------------------
    include_once ("../../thm/".$config['themes']."/foot.php&quot;-);

    DIR - главная сайта, задается из админки и если задать адрес без http://, то не работает оформление и конф. файлы.
    З.Ы. я в какомто движке видел функцию фильтрации ссылок, но не могу вспомнить в каком.

  • 8 ноя 2012 16:16

    А вообще огромное спасибо. кое как прикрутил ваши фильтры и вроде то что нужно работает.

  • 13 июн 2013 11:34

    если ещё жёсткую $myPage = ...   заменить на $_SERVER['SERVER_NAME'] - вообще универсальненько будет....

  • 17 июн 2013 17:51

    мы про РНР говорили, а скрипт на jQuery.  А как Вы, Миролан, из этого скрипта в РНР-шный будете данные перебрасывать?  Зачем такие сложности?  Уж в самом-то РНР проще серверные переменные опросить.

  • 17 июн 2013 18:01

    и что?  ссылки-то на МОЁМ проекте откуда-то берутся?  Так мне будет проще их на сервере обработать, не отсылая к клиенту.  И не надо будет яваскрипт (который на каком-нибудь браузере запросто заглючить может, а на смартфоне вообще не запуститься) на клиентской стороне гонять, ни времени, ни ресурсов клиентских отгрызая.   Мы ж программеры, давайте ж логически рассуждать.  Давайте код более эффективный и изящный создавать. :-)

  • Комментарий удалён.
  • 19 июн 2013 06:54
    про библиотеку я сразу думал, но jQuery так же сразу и отпала, т.к. контент в основном для мобилок.