Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Подстановка актуального домена в ссылку


Автор: viperson 5.1.2009, 22:25
Здравствуйте спецы. Помогите решить задачку. Учусь на курсах и в контрольной работе задали такой вопрос:  Есть ссылка типа http://site.com/news.php?add=news335. Эта ссылка находится на 10 000 страниц сайта(ссылка на новость типа), Но домен раз в день меняется и ссылка соответственно становится не рабочей, а руками править на 10 к страниц не реально. Каждый день уже не site.com а site2.com, site3.com и тд. Как организовать в html странице скрипт, который реализует подстановку правильного домена из файла domains.txt в момент нажатия на ссылку, то есть линк типа этого http://<?=$mylink?>/news.php?add=news335), где <?=$mylink?> тот домен который берется из файла domains.txt. Файл должен лежать в корне домена на страницах которого размещен линк. Я в кодинге пока не шарю особо, особенно в js? поэтому попрошу с примерчиками чтобы сразу попробовать. Очень нужна Ваша помосчь. smile 

Автор: webevt 5.1.2009, 22:48
viperson, реализация именно с помощью js? Во-первых, если ссылка на свой же сайт(на котором и скрипт), то можно использовать location.domain. Иначе, с помощью аякса отправлять запрос на этот txt файл, содержащий новое имя домена.

Автор: ksnk 5.1.2009, 23:08
Цитата

то есть линк типа этого http://<?=$mylink?>/news.php?add=news335), где <?=$mylink?> тот домен который

А чего - в контрольной работе пофиг на каком языке делать?

Автор: viperson 5.1.2009, 23:17
да в принципе всеравно на чем писать. Так как ссылка находится на html странице я предположил что может быть реализовано только на js, хотя можно на странице указать ссылку другого вида если в php делать и связать  эту ссылку с пхп скриптом на этом же домене.  Я создал параллельно топик в пхп разделе. Я не очень шарю в программировании, поэтому нужна любая реализация, если на js возможно то на нем, а если нет пригодятся любые реализации.

Добавлено @ 23:21
webevt  ссылка не на тот же домен. Ссылка находится на страницах моего сайта а ссылается на другой домен.

ksnk 
Вид переменной в домене просто случайный, не важно как будет выглядеть, хоть $domain? важна реализация задачи для html кода, то есть страница на которой линк на другой домен является html

Автор: ksnk 5.1.2009, 23:32
А как в точности формулируется задача? Просто, imho, задача должна быть хоть сколько нибудь приближена к реальности, а в реальности 10к страниц новостного сайта не меняются так каждый день. Более того, индекс ссылки новости не меняется никогда. И адрес ссылки всегда один и тот-же именно для того, чтобы ссылка всегда оставалась актуальной, чтобы Вася Пупкин, поместив новость в букмарки в детстве по пьяне, мог в старости, на трезвую голову ее еще раз прочитать...  smile 

Можно порешать более разумно, imho, выглядящую задачу - "давайте попроектируем охрененно большой новостной портал с офигенным потоком новостей..."  smile 

Автор: viperson 5.1.2009, 23:42
ksnk Все абстрактно в задаче. Не важно что это за сайт, на который ссылка. Просто преподавателям захотелось именно так. Пусть это будет любой другой сайт, а ссылка может выглядеть как угодно. то есть допустим http://blabla.com/viagra.html  smile  . Домен сменился на blablabla.com, а я эту ссылку засунул уже в 10к страниц и теперь менять вручную просто заи....сь, но есть в корне домена файл domains.txt в который я помещаю каждый день актуальный домен и надо чтобы скрипт подтягивал его в ссылку. Вопрос поставлен такой: C помощью каких языков можно реализовать смену домена и как реализовать? То еть нужны рабочие примеры либо на js либо на php, важно то что ссылка находится на html странице и как теперь ее связать с пхп или реализовать на js?

Автор: ksnk 6.1.2009, 00:05
Угу, а откуда тогда берутся "правила переименования ссылок"? 
Вот была ссылка "site1.com/?news=1234", на следующий день она должна стать "site3.ru/?add=2345". через два дня "site5.org/?add=news3456"?  Где и как предполагается хранить эти 10000 * `количество новостей на странице` ссылок?

Автор: viperson 6.1.2009, 00:14
ksnk site1.com/?news=1234", на следующий день она будет "site2.ru/?news=1234". через два дня "site5.org/?news=1234"  МЕНЯЕТСЯ ТОЛЬКО ДОМЕН! Если не знаешь как реализовать не пиши бред. 

10000 страниц на моем сайте и на каждой из них свои ссылки, Просто надо менять домен а не всю ссылку.
то есть изначально я должен иметь ввиду что домен может измениться и сразу в страницу добаить некий скрипт, который будет подтягивать имя домена, чтобы избежать таких ситуаций в будущем, то есть при создании других сайтов под размещение новостей

Автор: ksnk 6.1.2009, 00:38
viperson, Угу. Уже немного понятнее smile

Итого - есть просто файл с одним единственным именем домена, на который нужно заменить один-единственный домен в ссылках при показе всех этих 10000 страниц?

Автор: viperson 6.1.2009, 00:50
да ksnk именно так.
Я уже понял как реализовать, но нужна помосчь спецов пхп. 
Вот есть ссылка http://site.com/news.php?add=news1
В моей html странице mnogonews.html я указываю ее как news.php?add=news1, где news.php - мой пхп скрипт который лежит в корне моего домена, в котором задано правило, что нужно сделать редирект по ссылке news.php?add=news1, только вначале подставить домен вида http://site.com/ перед news.php?add=news1 взяв домен из файла domain.txt. Актуальный домен я сам руками каждый день прописываю в последнем. Пусть даже актуальный домен лежит в самом скрипте news.php -  не важно где прописана инфа об актуальном домене, то есть как реализуешь так реализуешь.

Автор: ksnk 6.1.2009, 01:01
файл replaceit.php
Код

<?php
define('REPLACE_ME','http://site.com');
define('CURRENT_SITE','http://site2.com');

echo "
var links=document.getElementsByTagName('a'),lcnt=links.length;
while(lcnt--){
   links[lcnt].href=links[lcnt].href.replace('''.REPLACE_ME."',"'.CURRENT_SITE."');
};
";
?>


Код

...
Много ссылок
...

<script type="text/javascript" src="replaceit.php"></script>
</body>


Ну раз уж нужно на javaScript'е порешать...

Автор: viperson 6.1.2009, 01:39
Данная реализация не работает,я  проверял.

Автор: Hades 6.1.2009, 15:50
файл ChangeDomains.js
Код

function f(link) {
    link.href = "http://www.blabla.com"; // делаем с ссылкой всё что хотим
}

добавляем в другие(10 000) страницы
Код

<head>
...
    <link href="ChangeDomains.js" type="text/javascript" />
...
</head>
<body>
...
    <a href="javascript:void(0)" onclick="f(this)">Hello</a>
...
</body>

Автор: viperson 6.1.2009, 16:03
Цитата(Hades @ 6.1.2009,  15:50)
файл ChangeDomains.js
Код

function f(link) {
    link.href = "http://www.blabla.com"; // делаем с ссылкой всё что хотим
}

добавляем в другие(10 000) страницы
Код

<head>
...
    <link href="ChangeDomains.js" type="text/javascript" />
...
</head>
<body>
...
    <a href="javascript:void(0)" onclick="f(this)">Hello</a>
...
</body>

Мне  не совсем понятна данная реализация. Есть 2 домена bla и blabla. В данный момент на всех страницах стоит bla. а ссылка - это не только имя домена , выглядит так: http://bla.com/news.php?add=news1. То есть скрипт должен автоматом сменить  http://bla.com/news.php?add=news1 на http://blabla.com/news.php?add=news1 при нажатии на нее. Кроме того на страницах есть ссылки на другие ресурсы и соответственно скрипт не должен применять ни каких правил к другим ссылкам.

Автор: Hades 6.1.2009, 16:11
Цитата(viperson @  6.1.2009,  15:03 Найти цитируемый пост)
То есть скрипт должен автоматом сменить

что вы тут напишите, на то он и сменит
Код

link.href = "http://blabla.com/news.php?add=news1"; // на пример


работает?

Автор: viperson 6.1.2009, 16:15
Цитата(Hades @ 6.1.2009,  16:11)
Цитата(viperson @  6.1.2009,  15:03 Найти цитируемый пост)
То есть скрипт должен автоматом сменить

что вы тут напишите, на то он и сменит
Код

link.href = "http://blabla.com/news.php?add=news1"; // на пример


работает?

нет смысла даже проверять. так как + ко всему на этих же страницах есть другие ссылки вида http://bla.com/news.php?add=news2, http://bla.com/news.php?add=news3 и тд. Я так понимаю что надо основываться на условии: если домен  = bla.com заменить на blabla com, то есть нужно менять не ссылку целиком, а только имя домена в ссылке.

Автор: Hades 6.1.2009, 16:22
Цитата(viperson @  6.1.2009,  15:15 Найти цитируемый пост)
Я так понимаю что надо основываться на условии: если домен  = bla.com заменить на blabla com, то есть нужно менять не ссылку целиком, а только имя домена в ссылке.

вы ведь всё ровно меняете домен в ручную,
так в чём проблема, что трудно поменять
Код

link.href = "http://bla.com/news.php?add=news1";

на
Код

link.href = "http://blabla.com/news.php?add=news1";

Автор: viperson 6.1.2009, 16:27
Цитата(Hades @ 6.1.2009,  16:22)
Цитата(viperson @  6.1.2009,  15:15 Найти цитируемый пост)
Я так понимаю что надо основываться на условии: если домен  = bla.com заменить на blabla com, то есть нужно менять не ссылку целиком, а только имя домена в ссылке.

вы ведь всё ровно меняете домен в ручную,
так в чём проблема, что трудно поменять
Код

link.href = "http://bla.com/news.php?add=news1";

на
Код

link.href = "http://blabla.com/news.php?add=news1";

Я понял он будет работать если на странице только одна ссылка, но, как я уже сказал выше, на странице есть еще другие ссылки вида http://bla.com/news.php?add=news2, http://bla.com/news.php?add=news3, 4, 5, 6 и тд и таких разных ссылок допустим тоже 10 000. Получается, что надо в js перечислить все 10000 ссылок.

Автор: viperson 6.1.2009, 18:02
Предлагаю рассмотреть другой вариант, когда в теле станицы ссылка выглядит <_a href="news.php?add=news1>news1</a> и <_a href="page.php?add=page1>page1</a> без имени домена и http, если такое возможно. Задача все таже - подставить актуальное имя домена вида _http://blabla.com/, но смена домена должна осуществлятся только в том случае если ссылка начинается с news.php и page.php, так на данной странице есть другие ссылки типа <_a href="oldnews.html">old news</a> которые указывают на  домен данной страницы. Как вариант, подойдет условие, что если страница в ссылке начинается с .php, а не .html. Опять же нужна связь с  .php или .txt, куда будет прописываться актуальный домен. 

Автор: Hades 6.1.2009, 21:54
файл ChangeDomains.js
Код

function f(link) {
    var newDomain = "superpuper";
    link.href = "http://www." + newDomain + link.href.substr(link.href.indexOf(".com"));
}


Код

<head>
...
    <link href="ChangeDomains.js" type="text/javascript" />
...
</head>
<body>
...
    <a href="http://www.bla.com/news.php?add=news1" onclick="f(this)">изменится!</a><br />
    <a href="http://www.hello.com/news.php?add=news2">не изменится</a><br />
    <a href="http://www.lalala.com/news.php?add=news3" onclick="f(this)">изменится!!</a><br />
    <a href="http://www.bla.com/news.php?add=news4" onclick="f(this)">изменится!!!</a>
...
</body>

дальше вставляйте свои 10 000 ссылок, только смотрите чтобы браузер не треснул smile 

Автор: viperson 6.1.2009, 22:27
Цитата(Hades @ 6.1.2009,  21:54)
файл ChangeDomains.js
Код

function f(link) {
    var newDomain = "superpuper";
    link.href = "http://www." + newDomain + link.href.substr(link.href.indexOf(".com"));
}


Код

<head>
...
    <link href="ChangeDomains.js" type="text/javascript" />
...
</head>
<body>
...
    <a href="http://www.bla.com/news.php?add=news1" onclick="f(this)">изменится!</a><br />
    <a href="http://www.hello.com/news.php?add=news2">не изменится</a><br />
    <a href="http://www.lalala.com/news.php?add=news3" onclick="f(this)">изменится!!</a><br />
    <a href="http://www.bla.com/news.php?add=news4" onclick="f(this)">изменится!!!</a>
...
</body>

дальше вставляйте свои 10 000 ссылок, только смотрите чтобы браузер не треснул smile

А ты проверял? У меня не пашет, вот посмотри сам http://usethis.info/2/1.html и кодстраницы посмотри, может я чот не так сделал. Даже проверил у 2-х разных хостинг провах

Автор: Hades 6.1.2009, 22:31
Цитата(Hades @  6.1.2009,  20:54 Найти цитируемый пост)
файл ChangeDomains.js

а на сервере есть такой файл?
должен быть в той же папке где и html-страница.

если не будет работать попробуйте так
Код

<head>
    <script type="text/javascript">
        function f(link) {
            var newDomain = "superpuper";
            link.href = "http://www." + newDomain + link.href.substr(link.href.indexOf(".com"));
        }
    </script>
</head>

<body>
    <a href="http://www.bla.com/news.php?add=news1" onclick="f(this)">изменится!</a><br />
    <a href="http://www.hello.com/news.php?add=news2">не изменится</a><br />
    <a href="http://www.lalala.com/news.php?add=news3" onclick="f(this)">изменится!!</a><br />
    <a href="http://www.bla.com/news.php?add=news4" onclick="f(this)">изменится!!!</a>
</body>

Автор: viperson 7.1.2009, 00:17
Цитата(Hades @ 6.1.2009,  22:31)
Цитата(Hades @  6.1.2009,  20:54 Найти цитируемый пост)
файл ChangeDomains.js

а на сервере есть такой файл?
должен быть в той же папке где и html-страница.

если не будет работать попробуйте так
Код

<head>
    <script type="text/javascript">
        function f(link) {
            var newDomain = "superpuper";
            link.href = "http://www." + newDomain + link.href.substr(link.href.indexOf(".com"));
        }
    </script>
</head>

<body>
    <a href="http://www.bla.com/news.php?add=news1" onclick="f(this)">изменится!</a><br />
    <a href="http://www.hello.com/news.php?add=news2">не изменится</a><br />
    <a href="http://www.lalala.com/news.php?add=news3" onclick="f(this)">изменится!!</a><br />
    <a href="http://www.bla.com/news.php?add=news4" onclick="f(this)">изменится!!!</a>
</body>

Ну конечно есть. Можешь проверить подставив в адрес вместо 1.html  ChangeDomains.js, который браузер предложит сразу скачать. Второй вариант проверил, тоже глухо.

Автор: Hades 7.1.2009, 00:44
viperson, 
извиняюсь, в место
Код

<link href="ChangeDomains.js" type="text/javascript" />

поставьте
Код

<script type="text/javascript" src="ChangeDomains.js"></script>

Цитата(viperson @  6.1.2009,  23:17 Найти цитируемый пост)
Второй вариант проверил, тоже глухо.

странно у меня работает.

Автор: viperson 7.1.2009, 01:01
Цитата(Hades @ 7.1.2009,  00:44)
viperson, 
извиняюсь, в место
Код

<link href="ChangeDomains.js" type="text/javascript" />

поставьте
Код

<script type="text/javascript" src="ChangeDomains.js"></script>

Цитата(viperson @  6.1.2009,  23:17 Найти цитируемый пост)
Второй вариант проверил, тоже глухо.

странно у меня работает.

Не работает на двух разных хостингах. Можешь ссылку дать страницы на твоем хостинге?

Автор: Hades 7.1.2009, 01:05
Цитата(viperson @  7.1.2009,  00:01 Найти цитируемый пост)
Не работает на двух разных хостингах.

можно посмотреть?

Автор: viperson 7.1.2009, 01:19
 1.  <script type="text/javascript">
        function f(link) {
            var newDomain = "superpuper";
            link.href = "http://www." + newDomain + link.href.substr(link.href.indexOf(".com"));
        }
    </script>

2. <script type="text/javascript" src="ChangeDomains.js"></script>


Оба варианта работают

Автор: Hades 7.1.2009, 01:25
Цитата(viperson @  7.1.2009,  00:19 Найти цитируемый пост)
 Это для хостингa №1 http://usethis.info/1/1.html

работает

Цитата(viperson @  7.1.2009,  00:19 Найти цитируемый пост)
 Это  для хостинга №1 http://usethis.info/1/2.html<script type="text/javascript" src="ChangeDomains.js"></script>

проверьте там должно быть именно ChangeDomains.js

Автор: viperson 7.1.2009, 01:35
Да уже все работает, во втором варианте где то ошибся. Создал файл заново и все заработало. Я очень Вам благодарен за решение не легкой(для меня) задачи smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)