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

Modyfikacja "DOM" z poziomu php

Object Storage Arubacloud
0 głosów
133 wizyt
pytanie zadane 17 lutego 2017 w PHP przez ShiroUmizake Nałogowiec (46,300 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 2017 przez Boshi VIP (100,240 p.)
komentarz 17 lutego 2017 przez ShiroUmizake Nałogowiec (46,300 p.)
Dokładnie o takie o coś mi chodziło. Tylko, widzę że bez frameworków się nie obędzie.
komentarz 17 lutego 2017 przez Boshi VIP (100,240 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 2017 przez ShiroUmizake Nałogowiec (46,300 p.)
Hmm...Zastanowię się nad tym crawlerem.
0 głosów
odpowiedź 17 lutego 2017 przez Ivan Maniak (60,650 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 2017 przez ShiroUmizake Nałogowiec (46,300 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 2017 przez hoktaur Pasjonat (22,250 p.)
edycja 17 lutego 2017 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 551 wizyt
pytanie zadane 22 sierpnia 2017 w PHP przez Kamil Stoksik Początkujący (490 p.)
–1 głos
1 odpowiedź 172 wizyt
pytanie zadane 26 kwietnia 2019 w PHP przez Lukasz7689 Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 239 wizyt
pytanie zadane 3 stycznia 2022 w Ogłoszenia, zlecenia przez japac Nowicjusz (150 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...