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

Modyfikacja "DOM" z poziomu php

VPS Starter Arubacloud
0 głosów
125 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 547 wizyt
pytanie zadane 22 sierpnia 2017 w PHP przez Kamil Stoksik Początkujący (490 p.)
–1 głos
1 odpowiedź 168 wizyt
pytanie zadane 26 kwietnia 2019 w PHP przez Lukasz7689 Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 237 wizyt
pytanie zadane 3 stycznia 2022 w Ogłoszenia, zlecenia przez japac Nowicjusz (150 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...