2015-10-11 3 views
0

У меня есть веб-сайт с URL-адресами на основе научных названий. Например, если значение «Canidae» находится в моей базе данных, на моем сайте будет отображаться страница на MySite/canidae.Переключение значения базы данных

Существует несколько научных названий, которые являются дубликатами. Например, есть два генерала рыбы по имени Лептоцефал, в то время как Филлантус - это имя как растительного рода, так и рода птиц.

Если я перехожу на MySite/bison, тогда он распознает его статус страницы млекопитающего через свои отношения родитель-ребенок. Родом родителя Bison является Bovidae, а его родителем является Ariodactyla и так далее, пока мы не доберемся до млекопитающих (Mammalia).

Итак, представьте себе, что у нас есть дублированное научное название - Myname. Предположим, что это млекопитающее с родителем по имени Mammus, а другое - рыба с родителем по имени Fishus.

Если мы перейдем к MySite/myname, страница распознает себя как млекопитающее по умолчанию. Я хотел бы знать, есть ли способ, позволяющий посетителям изменять страницу на «рыбную» страницу, нажав кнопку или ссылку, которая изменяет родителя от Mammus до Fishus. Другими словами, URL-адрес будет по-прежнему совпадать - MySite/myname. Но если посетитель нажмет кнопку или ссылку, содержимое изменится с содержания млекопитающих на содержание рыбы.

+1

Кажется, что вы можете написать свой запрос таким образом, чтобы он проверял наличие кратных (дубликатов) «myname». Тогда каждый из них найдет своего конечного родителя. Наконец, эхо-родительские кнопки на странице 'для каждого 'дублируют, отфильтровывая текущего родителя. – Kuya

+0

Я как бы понял, но как каждый кратный «нахожу своего конечного родителя»? –

+0

Не полагаясь на имя (или не на имя), а на (дополнительный) идентификатор. – VolkerK

ответ

1

Я согласен с Майклом - sqlbot до такой степени, что вы должны иметь более описательные URL, по двум причинам

1) Это более дружественным к пользователю
2) Больше поисковой системы

Итак, давайте начнем с того, что мы на этой странице www.examplesite.com/fish/myname, который показывает нам контент о «MyName» «Fish»

Интересно, что есть также «Млекопитающее». Поэтому мы предоставляем кнопки, позволяющие посетителю просматривать этот контент.

Это, как мы это делаем ...

Предположим, у вас есть три таблицы, как это ...

enter image description here
Как вы можете видеть, у нас есть два " " Животные называемые " MyName " ... но если вы отследите их, вы увидите, что ID # 2 является млекопитающим, а идентификатор № 5 - это рыба

Итак ... " MyName " имеет два родительских идентификатора

Мы запрос к базе данных, чтобы получить всю необходимую нам информацию, используя JOIN

$name = 'MyName'; 
$sql = "SELECT Animals.*, Species.*, ParentTable.* FROM Animals JOIN Species ON Animals.subcatid = Species.id JOIN ParentTable ON Species.parentid = ParentTable.id WHERE Animals.name=:name"; 
$query = $conn->prepare($sql); 
$query->bindValue(':name', $name, PDO::PARAM_STR); 
$query->execute(); 
$row = $query->fetchAll(); 

Затем эхо кнопки на странице, связывая их с их собственным уникальным URL

<?php foreach($row as $id) { ?> 
<input name="switch" type="button" value="<?php echo $id['name'] ?>" onclick="goToURL('self','/<?php echo $id['name'] ?>/MyName');return document.MM_returnValue"> 
<?php } ?> 

А вот это js для действия кнопки

<script type="text/javascript"> 
<!-- 
function goToURL() { //v3.0 
var i, args=goToURL.arguments; document.MM_returnValue = false; 
for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'"); 
} 
//--> 
</script> 

Счастливое кодирование!

3

Я действительно не люблю размещения ответов, которые говорят, «не делать то, что вы пытаетесь, сделать что-то другое», но мне кажется, здесь уместно, по одной причине, в частности:

Если содержание отличается , есть достаточно убедительный аргумент в том, что URL-адрес также должен быть другим.

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

Если у меня есть ссылка на ваш сайт, для меня не имеет смысла рассказывать кому-либо «перейдите к example.com/myname, в котором будет показано млекопитающее с похожим по совпадению именем, поэтому у вас есть щелкнуть «рыбу». «Рыбы, действительно.

Рассмотрите это тоже: даже если/bison однозначно, лучший дизайн может быть «301» перенаправляет браузер на «страницу» в/animalia/chordata/mammalia/eutheria/artiodactyla/bovidae/bovinae/bison ,

Если существует двусмысленность, представляйте страницу «значения» (как это делает Википедия, хотя ваша будет автоматически сгенерирована), предлагая канонические ссылки на возможные совпадения, вместо того, чтобы перенаправлять непосредственно на одну совпадающую страницу, как вы это делали бы в большинстве случаев.

Бизон пример предполагает, что вы не спуститесь на видовом уровне, в противном случае это также неоднозначна, с зубрами, как род и вид в Бизон бизона, род только в Bison bonasus и т.д.

Далее чтение: https://support.google.com/webmasters/answer/139066?hl=en

Смежные вопросы