Невозможно изменить HREF в зависимости от значения PHP - PullRequest
0 голосов
/ 26 декабря 2010

Я хочу получить местоположение пользователя, а затем показать ссылку, которая указывает на URL, который изменяется в соответствии с этим местоположением. Я просто хочу поместить название города пользователя в конце HREF.

Мне нужна эта работа на моем WordPress-сайте, на статической странице. Я использую плагин под названием Exec-php, который позволяет мне запускать PHP на страницах.

У меня есть плагин, который предоставляет мне город пользователя с помощью шорткода "[mmjs-city]".

Я пытался заставить его работать разными путями, но я так и не получил ссылку на работу.

Здесь я попытался присвоить этот шорткод значению,

<?php 
$city= "[mmjs-city]";
echo $city;

echo "<a href='?s=" . $city ."'>Search for your city</a>";
?>

Я добавил первые две строки, чтобы проверить, работает ли шорткод и правильно ли он указан в значении $ city. Эта часть работает. Затем он создает ссылку и в конце ставит значение $ city. Но при попытке это вместо того, чтобы взять меня на:

/? S = новый + йорк

Мне нужно:

/ с =% 3Cscript% 20language =% 22javascript% 22% 3Edocument.write (geoip_city ());?% 3C / Сценарий% 3E

Понятия не имею, что делать. Я был бы очень благодарен за любую информацию о том, как заставить это работать, это действительно важная особенность для моего сайта. Пожалуйста, попросите любую дополнительную информацию или idk что-нибудь.

Также здесь я протестировал этот код:

http://chusmix.com/?page_id=1129

Спасибо

Ответы [ 4 ]

3 голосов
/ 26 декабря 2010

Проблема в том, что $ city на самом деле выводит кусочек javascript. Затем браузер выполняет функцию, и это выводит на экран город пользователя.

<script language="javascript">document.write(geoip_city());</script><br/><br/><a href='?s='>Search for your city</a>

Если вы используете это в своем href, это будет в буквальном смысле ссылка на <script language="javascript">document.write(geoip_city());</script>, что приводит к URL, как вы показываете.

Вы используете Javascript и PHP через друга. Если вы хотите создать ссылку с городом, создайте ссылку (или измените ее) javascript: найдите ссылку (дайте ей идентификатор или найдите ее в DOM) и назначьте ссылку, или напечатайте саму ссылку, используя javascript (вместо A):

<script language="javascript">
document.write('<a href="?s=' + geoip_city() + '">Search for your city</a>');
</script>
1 голос
/ 26 декабря 2010

Если вы проверите HTML-код страницы, вы, вероятно, увидите

<script language="javascript">document.write(geoip_city());</script>

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

Другими словами, JavaScript-код в ссылке не выполняется.

0 голосов
/ 26 декабря 2010

Ваша проблема в том, что местоположение не из PHP. Все, что делает шорткод, это помещает в некоторый javascript, который идет, чтобы получить местоположение, а затем печатает его.

<script language="javascript">document.write(geoip_city());</script>

Что вы можете сделать, это использовать какой-то другой метод поиска местоположения на основе IP-адреса. Как то так: http://ipinfodb.com/ip_location_api.php

Или вы можете написать некоторый javascript, который использует функцию geoip_city(), которую предоставляет ваш плагин, и изменить ссылки URL, которые необходимо изменить. Если URL, который нужно было изменить, был в ссылке с классом location_link (и вы используете jQuery), вы можете сделать:

$('.location_link').each(function(i,v) {
    $(v).attr('href', $(v).attr('href') + geoip_city());
});

Ссылка изначально должна быть просто ?s=, чтобы это работало. Этот код необходимо выполнить после загрузки всех элементов страницы - для этого вы можете использовать функцию ready в jQuery: http://api.jquery.com/ready/

0 голосов
/ 26 декабря 2010

Привет, Лисо, это потому что шорткодом манипулирует плагин WP и выводится как javascript.Таким образом, при доступе к шорткоду с помощью вышеуказанного метода фактическим назначаемым значением является этот javascript.

...