• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Modyfikacja "DOM" z poziomu php

0 głosów
72 wizyt
pytanie zadane 17 lutego w PHP, Symfony, Zend przez ShiroUmizake Nałogowiec (27,610 p.)

A oto problem. Mamy powiedzmy jakiś szablon z navbarem.

if (is_category('DevBlog'))
	{
  echo '<li id="1" class="nav_size display"><a href="http://localhost/wordpress/wordpress/">About</a></li>';
  echo '<li id="2"class="nav_size display nav_activ"><a href="http://localhost/wordpress/wordpress/category/devblog/">DevBlog</a></li>';
  echo '<li id="2"class="nav_size display"><a href="http://localhost/wordpress/wordpress/category/projects/">Projects</a></li>';
	echo '<li id="3" class="nav_size display"><a href="http://localhost/wordpress/wordpress/category/contact/">Contact</a></li>';
    return;
	}

Od pewnych warunków, zależy, że dany węzeł będzie trochę inaczej wyglądać (otrzyma klase nav_activ). Tak... mógłbym to z poziomu JS-a zrobić, ale musiałbym więcej danych do klienta dosłać np: co to jest za kategoria. Drugim rozwiązaniem jest rozbicie nav do np: header-contact.php. A Obecnie to wygląda tak.

function infoURL ()
{
  $category = get_category_link("devblog");
  if (is_home()){
    	echo '<li id="1" class="nav_size display nav_activ"><a href="http://localhost/wordpress/wordpress/">About</a></li>';
      echo '<li id="2"class="nav_size display"><a href=';$category' >DevBlog</a></li>';
      echo '<li id="2"class="nav_size display"><a href="http://localhost/wordpress/wordpress/category/projects/">Projects</a></li>';
    	echo '<li id="3" class="nav_size display  "><a href="http://localhost/wordpress/wordpress/category/contact/">Contact</a></li>';
      return;
  }
	if (is_category('DevBlog'))
	{
  echo '<li id="1" class="nav_size display"><a href="http://localhost/wordpress/wordpress/">About</a></li>';
  echo '<li id="2"class="nav_size display nav_activ"><a href="http://localhost/wordpress/wordpress/category/devblog/">DevBlog</a></li>';
  echo '<li id="2"class="nav_size display"><a href="http://localhost/wordpress/wordpress/category/projects/">Projects</a></li>';
	echo '<li id="3" class="nav_size display"><a href="http://localhost/wordpress/wordpress/category/contact/">Contact</a></li>';
    return;
	}
	if (is_category('Contact'))
	{
	echo '<li id="1" class="nav_size display"><a href=http://localhost/wordpress/wordpress/">About</a></li>';
  echo '<li id="2"class="nav_size display "><a href="http://localhost/wordpress/wordpress/category/devblog/">DevBlog</a></li>';
	echo '<li id="2"class="nav_size display "><a href="http://localhost/wordpress/wordpress/category/projects/">Projects</a></li>';
	echo '<li id="3" class="nav_size display nav_activ "><a href="http://localhost/wordpress/wordpress/category/contact/">Contact</a></li>';
	return;
	}

	if  (is_category('projects'))
	{
  echo '<li id="1" class="nav_size display"><a href=http://localhost/wordpress/wordpress/">About</a></li>';
  echo '<li id="2"class="nav_size display"><a href="http://localhost/wordpress/wordpress/category/devblog/">DevBlog</a></li>';
	echo '<li id="2"class="nav_size display nav_activ "><a href="http://localhost/wp/topic/projects/">Projects</a></li>';
	echo '<li id="3" class="nav_size display "><a href="http://localhost/wordpress/wordpress/category/contact/">Contact</a></li>';
	return;
	}
	else
	{
    echo '<li id="1" class="nav_size "><a href=http://localhost/wordpress/wordpress/">About</a></li>';
    echo '<li id="2"class="nav_size "><a href="http://localhost/wordpress/wordpress/category/devblog/">DevBlog</a></li>';
  	echo '<li id="2"class="nav_size "><a href="http://localhost/wp/topic/projects/">Projects</a></li>';
  	echo '<li id="3" class="nav_size "><a href="http://localhost/wordpress/wordpress/category/contact/">Contact</a></li>';
}
	return;
	}

Musicie sami stwierdzić, że nie wygląda to za dobrze. Pytanie brzmi, czy z poziomu PHP da radę manipulować DOM (najlepiej na czystym PHP)?

3 odpowiedzi

+2 głosów
odpowiedź 17 lutego przez Boshi Szeryf (93,820 p.)
komentarz 17 lutego przez ShiroUmizake Nałogowiec (27,610 p.)
Dokładnie o takie o coś mi chodziło. Tylko, widzę że bez frameworków się nie obędzie.
komentarz 17 lutego przez Boshi Szeryf (93,820 p.)
To jest tylko komponent...

ponadto masz http://php.net/manual/en/class.domxpath.php na któym de facto symfony bazuje
komentarz 17 lutego przez ShiroUmizake Nałogowiec (27,610 p.)
Hmm...Zastanowię się nad tym crawlerem.
0 głosów
odpowiedź 17 lutego przez Ivan Maniak (53,410 p.)

Jeżeli faktycznie chcesz "manipulować" DOM-em, to opłaca się wyciągnąć coś lepszego, ale jak potrzebujesz tylko dodać klasę, gdy jesteś na jakiejś stronie, to możesz stworzyć jakąś klasę i dodać ją w miejscu, gdy ma być lub nie ma być klasy. Nie potrafię tego ładnie opisać, więc po prostu podam przykładowy kod :):

function is_category($category) {
	return $category == 'abc';
}

function is_active_category($category, $text) {
	return is_category($category) ? $text : null;
}

echo "<li". is_active_category('abc', ' class=active') ."></li>";

 

komentarz 17 lutego przez ShiroUmizake Nałogowiec (27,610 p.)

Czy chodzi ci o cos takiego?

foreach ($categoryList as $category){
if (is_active_category($category){
  buildActiveLiElement(  getLink($category) );
}
else {
buildLiElement( getLink ($category) );
}

function is_active_category($category){
return is_category($category) <-- zwraca true lub false
}

getLink ($category){
return get_category_link(get_cat_ID($category)); // Pierwsze pyta o id danej kategori, drugi uzyskuje link do kategori.
}

 

0 głosów
odpowiedź 17 lutego przez hoktaur Pasjonat (18,670 p.)
edycja 17 lutego przez hoktaur

Wole użycie szablonów przez co oddzielisz php od html i można to zrobić bez frameworków w oparciu o tzw. surowe szablony PHP

i tak jakiś tam plik php

<?php
$display = ' display';

if (is_home()) { 
	$about = ' nav_active';
} elseif(is_category('DevBlog')) {
	$devBlog = ' nav_active';
} elseif (is_category('Contact')) {
	$contact = ' nav_active';
} elseif(is_category('projects')) {
	$projects = ' nav_active';
} else {
	$display = '';
}

include 'template.tpl';
?>

 

i plik template.tpl


<li id="1" class="nav_size <?php echo $display . $about ?>"><a href="http://localhost/wordpress/wordpress/">About</a></li>';
<li id="2" class="nav_size <?php echo $display . $devBlog ?>"><a href="http://localhost/wordpress/wordpress/category/devblog/">DevBlog</a></li>';
<li id="2" class="nav_size <?php echo $display . $projects ?>"><a href="http://localhost/wp/topic/projects/">Projects</a></li>';
<li id="3" class="nav_size <?php echo $display . $contact ?>"><a href="http://localhost/wordpress/wordpress/category/contact/">Contact</a></li>';

niestety pisane z palca i nie testowane ...

Podobne pytania

0 głosów
2 odpowiedzi 53 wizyt
pytanie zadane 1 dzień temu w PHP, Symfony, Zend przez Kamil Stoksik Początkujący (360 p.)
0 głosów
1 odpowiedź 67 wizyt
0 głosów
2 odpowiedzi 80 wizyt

37,418 zapytań

74,639 odpowiedzi

144,769 komentarzy

17,339 pasjonatów

Przeglądających: 87
Pasjonatów: 1 Gości: 86

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...