Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Google Sitemap w simplexml_load_string(), Problem z tworzeniem/podglądem tagów image:
Tomplus
post
Post #1





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Tomplus 21.11.2017, 12:38:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




I jaki to ma zwiazek z OOP? No zaden. Przenosze
Go to the top of the page
+Quote Post
Tomplus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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ł.

Ten post edytował Tomplus 21.11.2017, 12:46:00
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Tomplus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Masz rację. Logika moich wypowiedzi trochę jest dzisiaj wypaczona (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Tomplus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Jerdyna metoda nie używana w tej chwili to:
addCData($xml, $cdata_text)

Wrzuciłem kod tutaj:
https://gist.github.com/Tomirad/08eb9f59368...0f460279741232a
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No i zgodnie z manualem powinno byc poprostu

$this->xml_http->createCDATASection('Some text');
Go to the top of the page
+Quote Post
Tomplus
post
Post #9





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Nie wiem gdzie znalazłeś to w manualu, ale dla klasy: http://php.net/manual/en/class.simplexmlelement.php nie ma takiej metody.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Bylem swiecie przekonany ze uzywasz DOM. Wszakze to addChild mi nie pasowalo.... teraz juz wiem czemu (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Tomplus
post
Post #11





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


To może bez sensu jest to że korzystam z tej klasy, a nie DOMDocument?
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Tomplus
post
Post #13





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 19:50