• 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 2017 w PHP, Symfony, Zend przez ShiroUmizake Nałogowiec (33,680 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,000 p.)
komentarz 17 lutego 2017 przez ShiroUmizake Nałogowiec (33,680 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,000 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 (33,680 p.)
Hmm...Zastanowię się nad tym crawlerem.
0 głosów
odpowiedź 17 lutego 2017 przez Ivan Maniak (59,430 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 (33,680 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 (20,490 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 75 wizyt
pytanie zadane 22 sierpnia 2017 w PHP, Symfony, Zend przez Kamil Stoksik Początkujący (450 p.)
0 głosów
1 odpowiedź 77 wizyt
pytanie zadane 14 sierpnia 2017 w PHP, Symfony, Zend przez hiper007 Mądrala (6,960 p.)
0 głosów
2 odpowiedzi 83 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.
Ciekawy innych porad? Odwiedź tę stronę!

45,834 zapytań

86,295 odpowiedzi

172,524 komentarzy

22,267 pasjonatów

Przeglądających: 197
Pasjonatów: 27 Gości: 170

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.

...