2013-06-14 11 views
0

Я хотел бы привести ссылки на похожие темы в конце записи в блоге. Моя стратегия была бы процитировать тему тег как атрибут класса в HTML или тело элемента:PHP: проверьте, имеет ли элемент HTML определенный класс.

<html class="bears honey alaska"> 

И сделать простую функцию PHP в нижней части страницы: «Если есть класс„медведи“, включают медведь. php здесь. " Без каких-либо elses.

Может ли кто-нибудь помочь мне с кодом?

Атрибут данных в HTML 5 может быть более подходящим для этого, но я не знаю, может ли PHP обращаться к ним.

Спасибо. Runa

+1

как вы даете свой html эти классы? Статически? Если это так, вам нужно будет использовать что-то вроде jQuery ajax для вызова php и получения данных. PHP является серверной стороной и обрабатывает перед выходом, поэтому вы не можете ожидать, что он будет реагировать на то, что уже записано в DOM. –

+0

Поскольку вы пытаетесь сделать это с PHP-стороны, нет никакой разницы между атрибутами class или 'data-', обе они одинаково неэффективны. Это потребует чтения OB и использования парсера DOM/уродливых регулярных выражений. Вы бы гораздо лучше использовали переменные, глобальный массив позаботился бы об этом легко. –

+0

@KaiQing Ajax является независимым и имеет ** ничего ** делать с jQuery. – Sebas

ответ

0

Вы можете сделать это легко с регулярными выражениями, как это:

$html_string = '<html class="bears honey alaska">'; 
$class = 'bears'; 
$has_bears = preg_match('/<html class="[^"]*'.$class.'[^"]*">/', $html_string); 
if ($has_bears) { 
    include('bears.php'); 
} 

Тем не менее, я настоятельно призываю вас прочитать другие комментарии на ваш вопрос. То, что вы хотите сделать, на самом деле не похоже на идеальное решение.

1

Вы можете создать массив классов, которые вы хотите включить в PHP, прежде чем писать страницы:

$classes = array('bears', 'honey', 'alaska'); 

После того, как вы на самом деле нужно напечатать классы в HTML тег, вы можете сделать что-то вроде этого:

позже в коде, вы можете сделать следующее вещь:

if (in_array("bears", $classes) 
{ 
    // your code here 
} 

Это упростит вам возможность добавлять дополнительные классы позже, все, что вам нужно сделать, это добавить еще один в свой массив.

4

Вместо проверки классов в PHP, я хотел бы использовать PHP для определения классов, а затем распечатать его в HTML

<?php 
$tags = array('bears', 'honey', 'alaska'); 
?> 
<html class="<?=implode(' ', $tags)?>"> 

и в конце концов вы можете

if(in_array('bears', $tags)) include("bears.php"); 

или если вы хотите включить файл с тем же именем для каждого тега:

foreach($tags as $tag) include($tag.".php"); 

Последнее потребует от вас чтобы у вас был файл для каждого. В качестве альтернативы более сложные решения (например, классы) могут оказаться более полезными в долгосрочной перспективе.

+0

Спасибо всем. Массив не приходил мне в голову. Это лучший способ, и ваш код работает. – Helen

0

Если (и вам нужно будет уточнить, если это так), вы используете только PHP, тогда код будет выполнен на стороне сервера. Нет необходимости добавлять классы, и вы не можете их обнаружить, поскольку DOM еще не создан. Просто сохраните свои темы в переменной, например.массив:

$myTopics = ["bears","honey","alaska"]; 

Затем вы можете проверить позже на странице, если данное значение в массиве тем:

if(in_array("bears", $myTopics) { 
    doStuff(); 
} 

Если вы используете отдельные файлы для создания страницы, вам может понадобиться объявить и получить $ myTopics в качестве глобальной переменной, чтобы использовать ее позже.

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