Forum » Izdelava spletišč » pomoč PHP in DOM elementi
pomoč PHP in DOM elementi
Matthaios ::
Naletel sem na eno težavo pri obdelavi html tagov z php-jem. Tle nisem na domačem terenu. Sem sprobu samo par stvari do zdaj. Imam slike, ki jih vstavlja wysiwyg editor. Zdaj hočem te slike narest tako da jih s pomočjo prettyPhoto prikažem v večjem merilu kot slideshow. src slike lahko preberem s tem
Ne zanam pa kako sliki dodati class in pol linkom (ki sem jih že dodal pred vsako sliko) določiti href vrednost na link slike. Lahko me tudi usmerite na kakšen koristen članek (php.net ni preveč koristen vsaj ne na tej stopnji).
$doc = new DOMDocument(); @$doc->loadHTML($row['content']); $tags = $doc->getElementsByTagName('img'); foreach ($tags as $tag) { $tag->getAttribute('src'); }
Ne zanam pa kako sliki dodati class in pol linkom (ki sem jih že dodal pred vsako sliko) določiti href vrednost na link slike. Lahko me tudi usmerite na kakšen koristen članek (php.net ni preveč koristen vsaj ne na tej stopnji).
Matthaios ::
http://stackoverflow.com/questions/2723...
Sem že prej na googlu zasledil ta navodila sam mi kljub temu ni ratal. Pogledal sem tudi na php.net pod setAttribute in spet nč. Tole kodo uporabljam.
$img = array( ); $doc = new DOMDocument(); @$doc->loadHTML($content); $tags = $doc->getElementsByTagName('img'); foreach ($tags as $tag) { $img[] = $tag->getAttribute('src'); } $content = str_replace("<img", "\n<br/><a href='' rel='prettyPhoto[test]' alt='' title='' width='800px' height='600px'><img", $content); @$doc->loadHTML($content); $tags = $doc->getElementsByTagName('a'); $i = 0; foreach ($tags as $tag) { if($tag->hasAttribute('rel')){ $tag->setAttribute('href', $img[$i]); $i++; } }
Prebere mi link slike, doda nov link pred sliko, if stavek pogleda samo linke z 'rel' atributom. Edino kar ne deluje je nastavljanje atributa 'href' na prej prebran link slike. Kaj delam narobe?
usoban ::
kaj sploh ne spremeni href attributa? Kako pa izpises potem zadevo? Also, pri str_replace ne zapres a-tagov.
Matthaios ::
Tole je cel odsek kode
tole pa pride vn
Res mi ni jasn kje je napaka. (vem da bo na konc kej banalnega)
<? $content = "<img alt='' src='/userfiles/images/Kaystone%20tractor%20works/key%201311223469_350x246.jpg' style='width: 350px; height: 246px;' /> <img alt='' src='/userfiles/images/Kaystone%20tractor%20works/key%20up-55F1V7EASJPISK6G_350x233.jpg' style='width: 350px; height: 233px;' />"; $img = array( ); $doc = new DOMDocument(); @$doc->loadHTML($content); $tags = $doc->getElementsByTagName('img'); foreach ($tags as $tag) { $img[] = $tag->getAttribute('src'); } $content = str_replace("<img", "\n<a href='' rel='prettyPhoto[test]' width='800px' height='600px'/><img", $content); @$doc->loadHTML($content); $tags = $doc->getElementsByTagName('a'); $i = 0; foreach ($tags as $tag) { if($tag->hasAttribute('rel')){ $tag->setAttribute('href', $img[$i]); $i++; } } echo $content; ?>
tole pa pride vn
<html> <head> </head> <body> <a href='' rel='prettyPhoto[test]' width='800px' height='600px'/><img alt='' src='/userfiles/images/Kaystone%20tractor%20works/key%201311223469_350x246.jpg' style='width: 350px; height: 246px;' /> <a href='' rel='prettyPhoto[test]' width='800px' height='600px'/><img alt='' src='/userfiles/images/Kaystone%20tractor%20works/key%20up-55F1V7EASJPISK6G_350x233.jpg' style='width: 350px; height: 233px;' /> </body> </html>
Res mi ni jasn kje je napaka. (vem da bo na konc kej banalnega)
usoban ::
Kolkor vidim ne izpises posodobljenega dokumenta. Na koncu namesto
Pa se enkrat,
echo $contentdaj
echo $doc->saveXml()
Pa se enkrat,
<a>taga ne zakljucis. Glede na to,da si se lotil vstavljanja kar s str_replace, ga spremeni v
$content = str_replace(array("<img", "</img>"), array("\n<a href='' rel='prettyPhoto[test]' width='800px' height='600px'/><img", "</img></a>"), $content);
Zgodovina sprememb…
- spremenil: usoban ()
Matthaios ::
Kolkor vidim ne izpises posodobljenega dokumenta. Na koncu namestoecho $contentdajecho $doc->saveXml()
Hja sm vedu da je kakšna neumna napaka. Zdaj pa dela. Sm tud tist str_replace umaknu tko da zgleda velik lepš
$doc = new DOMDocument(); $doc->loadHTML($content); $tags = $doc->getElementsByTagName('img'); foreach ($tags as $tag) { $link = $doc->createElement('a'); $link->setAttribute('rel','prettyPhoto[test]'); $element = $tag->parentNode->insertBefore($link,$tag); $element->setAttribute('href',$tag->getAttribute('src')); $element->appendChild($tag); } echo $doc->saveHTML();
Edin ne vem kako to vrinit v obstoječo html kodo brez da mi da html tag. To naj bi pri shranjevanju vnosa v bazo vklopilo prettyPhoto funkcijo. In ta koda bo na strani izpisana znotraj div elementa tko da ne rabim še enkrat html in body tag-e.
MrBrdo ::
Off-topic, k sm lih danes nekaj delal podobnega, v Rubyju bi to tko zgledal:
I love Ruby
puts Nokogiri::HTML(content).tap { |doc| doc.css('img').each { |e| e.before(doc.create_element('a', rel: 'prettyPhoto[test]', href: e['src']).add_child(e.dup).parent) } }.to_html
I love Ruby
MrBrdo
MrBrdo ::
Matthaios drugače pa poglej, če lahko rečeš elementu body, da ti vrne html (getElementsByTagName('body')).
MrBrdo
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Web crawlerOddelek: Programiranje | 1441 (574) | b3D_950 |
» | Slo-Tech userscriptsOddelek: Izdelava spletišč | 5151 (2603) | jype |
» | [Java]Shranjevanje/Branje nastavitev za povezavo z podatkovno bazoOddelek: Programiranje | 2601 (2375) | KernelPanic |
» | getElementsByTagName ne dela v ChromuOddelek: Programiranje | 1668 (1406) | win64 |
» | PHP XML->attributesOddelek: Programiranje | 1376 (1312) | keworkian |