Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Google Sitemap w simplexml_load_string()
Forum PHP.pl > Forum > PHP
Tomplus
Witam,

Mam prośbę o pomoc w sprawie rozwiązania kwestii tworzenia tagów sitemap wg standardu Google. W sieci nie znalazłem żadnej pomocy w tej kwestii, więc może tutaj ktoś będzie znał odpowiedź.

Mam działający kod tworzący Sitemap. Generuje poprawnie z wyjątkiem <![CDATA[]] które wygląda tak: &lt;![CDATA[]]&gt;

Elementy standardu Google tworzę poprzez metodę addImage(), gdzie aby zadziałały tagi image:* muszę dodać poprawny schema, bez tego będę miał tagi: image > [loc, title, caption] zamiast image:image > [image:loc, image:title, image:caption]

  1. private function addImage($siteurl, $imageUrl, $productName, $description) {
  2. $image = $siteurl -> AddChild('image:image', null, 'http://www.google.com/schemas/sitemap-image/1.1');
  3. $image -> AddChild('image:loc', "<![CDATA[{$imageUrl}]]>");
  4. $image -> AddChild('image:title', "<![CDATA[{$productName}]]>");
  5. $image -> AddChild('image:caption', "<![CDATA[{$description}]]>");
  6. }




W sieci znalazłem rozwiązanie do dodawania poprawnie CDATA, ale powyższym kodzie nie działa, z racji tego że w obiekt $image wydaje się pusty. Brak jakichkolwiek elementów, w porównaniu do $siteurl. Dlatego poniższa metoda nie działa, bo nie ma o co zahaczyć. Jednakże finalnie w pliku XML, mam wszystkie te pozycje.

  1. private function addCData($xml, $cdata_text) {
  2. $node = dom_import_simplexml($xml);
  3. $dom = $node -> ownerDocument;
  4. $node->appendChild($dom -> createCDATASection($cdata_text));
  5. }



Proszę o pomoc w poprawnym utworzeniu tagu image, z poprawnym CDATA.
nospor
I jaki to ma zwiazek z OOP? No zaden. Przenosze
Tomplus
Temat miał być tylko w dziale PHP.

Cytat('Nospor')
Co mialo to wspolnego z OOP tylko w dziale PHP ?


Niewiele.
Dlatego mówię. Miało być w głównym dziale czyli PHP - tak jak teraz. Nie wiem dlaczego rozpocząłem wątek w OOP. Pewnie dlatego że kliknąłem przez pomyłkę ten dział.
nospor
Cytat
Niewiele.
Dlatego mówię
Po edycji swojego posta, to on mial sens. Ja pytalem zanim go zedytowales, kiedy to nie mial jeszcze zadnego sensu smile.gif
Tomplus
Masz rację. Logika moich wypowiedzi trochę jest dzisiaj wypaczona smile.gif
W innym temacie, czy znasz błąd edycji jaki pojawia się podczas próby modyfikacji treści głównego wątku? U mnie jest rozwalony cały kod.
nospor
Forum czasami robi takie numery przy edycji...

Co do tematu:
pokaz cala klase, bo generalnie createCDATASection() dziala prawidlowo. Z kodu co pokazales wynika, ze mocno to przekombinowales
Tomplus
Jerdyna metoda nie używana w tej chwili to:
addCData($xml, $cdata_text)

Wrzuciłem kod tutaj:
https://gist.github.com/Tomirad/08eb9f59368...0f460279741232a
nospor
No i zgodnie z manualem powinno byc poprostu

$this->xml_http->createCDATASection('Some text');
Tomplus
Nie wiem gdzie znalazłeś to w manualu, ale dla klasy: http://php.net/manual/en/class.simplexmlelement.php nie ma takiej metody.
nospor
Bylem swiecie przekonany ze uzywasz DOM. Wszakze to addChild mi nie pasowalo.... teraz juz wiem czemu biggrin.gif
Tomplus
To może bez sensu jest to że korzystam z tej klasy, a nie DOMDocument?
nospor
No z tego co widze do simplexml nie wspiera CDATA.
Na szybko znalazlem to obejscie
https://stackoverflow.com/questions/6260224...implexmlelement
ktore jest podobne do tego co miales wczesniej, ale ma pare subtelnych roznic i moze zadzialac wink.gif
Tomplus
Naprawdę bardzo subtelne.

Zastosowałem powyższy kod z tymi delikatnymi zmianami jako nowa klasa

  1. class SimpleXMLExtended extends \SimpleXMLElement{
  2. public function AddChildWithCData($name, $value) {
  3. $new = parent::addChild((string) $name);
  4. $base = dom_import_simplexml($new);
  5. $docOwner = $base->ownerDocument;
  6. $base->appendChild($docOwner->createCDATASection((string) $value));
  7. }
  8. }


I oczywiście zainicjować należy ją zamiast SimpleXMLElement();

ważne image:* są poprawne, w innych kombinacjach nie były z nimi problemy jako tagi.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.