YML format na data parser sa html. Content parser: Pagpapatupad ng pag-parse ng mga XML(YML) na file. Pag-unawa sa YAML syntax

Ang pagsubok sa instrumento, configuration file, at log file ay dapat na lahat ay nababasa ng tao. Ang YAML (YAML Not Markup Language) ay may mas kaunting verbose data kaysa sa XML serialization na format at naging sikat na format sa mga developer ng software dahil mas madali itong maunawaan ng tao. Ang mga YAML file ay simpleng mga text file na naglalaman ng data na nakasulat ayon sa mga panuntunan sa syntax ng YAML at karaniwang may extension ng .yml file. Sa artikulong ito, matututunan mo ang mga pangunahing kaalaman ng YAML at kung paano mo maisasama ang YAML parser ng PHP sa iyong mga proyekto.

Gumamit ng YAML para sa Mga Proyekto ng PHP

Pag-unawa sa YAML syntax

Sinusuportahan ng YAML ang mga advanced na feature gaya ng mga reference at custom na uri ng data, ngunit bilang isang PHP developer, kadalasan ay magiging interesado ka sa kung paano kinakatawan ng YAML ang mga enumerated array (mga pagkakasunud-sunod sa terminolohiya ng YAML) at mga associative arrays (mappings).

Narito kung paano kinakatawan ang isang enum sa isang YAML array:

- "William O'Neal" - mali

Ang bawat elemento ng array ay kinakatawan pagkatapos ng isang gitling at isang puwang. Ang syntax nito para sa kumakatawan sa mga halaga ay katulad ng PHP (pag-quote ng mga string, atbp.)

Ang nasa itaas ay katumbas ng sumusunod na PHP:

Karaniwan, lumilitaw ang bawat elemento sa sarili nitong linya sa YAML, ngunit ang mga nakalistang array ay maaaring ipahayag sa isang linya gamit ang mga panaklong:

[ 2, "William O'Neal", mali ]

Ipinapakita ng sumusunod na code kung paano kinakatawan ang isang associative array sa YAML:

Id: 2 name: "William O'Neal" isActive: false

Ang unang elemento ng key ay tumutukoy sa isang colon at isa o higit pang mga puwang, at pagkatapos ay ang halaga ay tinukoy. Ang pagkakaroon lamang ng isang puwang pagkatapos ng colon ay sapat na, ngunit maaari kang gumamit ng mas maraming espasyo para sa mas madaling mabasa kung gusto mo.

Ang katumbas na PHP array ng YAML sa itaas ay:

2, "name" => "William O"Neal", "isActive" => false);?>

At katulad ng mga enumerated array, maaari kang magpahayag ng mga associative array sa isang linya gamit ang mga curly brace:

( id: 2, pangalan: "William O'Neal", isActive: false )

Sa isa o higit pang mga puwang para sa indentation, maaari kang kumatawan sa isang multidimensional na array tulad nito:

Sa itaas ng YAML block ito ay katumbas ng sumusunod na PHP:

array(0 => array("id" => 1, "name" => "Brad Taylor", "isActive" => true), 1 => array("id" => 2, "name" => " William O"Neill", "isActive" => false)));?>

Pinapayagan ka rin ng YAML na kumatawan sa isang koleksyon ng mga elemento ng data sa isang dokumento nang hindi nangangailangan ng root node. Ang sumusunod na halimbawa ay naglalaman ng mga nilalaman ng article.yml, na nagpapakita ng maraming multidimensional na array sa isang file.

Author: 0: ( id: 1, name: "Brad Taylor", isActive: true ) 1: ( id: 2, name: "William O"Neal", isActive: false ) category: 0: ( id: 1, name : "PHP" ) 1: ( id: 2, pangalan: "YAML") 2: ( id: 3, pangalan: "XML") artikulo: 0: id: 1 pamagat: "Paano Gamitin ang YAML sa isang Proyekto ng PHP" content: > Ang YAML ay isang hindi gaanong verbose na format ng serialization ng data. Sa likod nito ay "Ang YAML ay hindi isang Markup Language." : 0 : ( articleId: 1, categoryId: 1 ) 1: ( articleId: 1, categoryId: 2 )

Bagama't ang karamihan sa YAML syntax ay madaling maunawaan at madaling matandaan, mayroong isang mahalagang tuntunin na dapat bigyang pansin. Ang pagkakahanay ay dapat gawin sa isa o higit pang mga puwang; Hindi pinapayagan ang mga tab. Maaari mong i-configure ang IDE upang magpasok ng mga puwang sa halip na mga tab kapag pinindot mo ang tab key, na isang karaniwang pagsasaayos sa mga developer ng software upang matiyak na ang code ay maayos na naka-indent at lumilitaw kapag tiningnan sa ibang mga editor.

Maaari kang matuto ng higit pang mga advanced na feature at syntax, at kung ano ang sinusuportahan ng YAML, sa pamamagitan ng pagbabasa ng mga opisyal na doc, Symfony, o Wiki.

Ang YAML ay hindi dapat maging alternatibo sa XML

Kung nagsasaliksik ka ng YAML gamit ang iyong paboritong search engine, walang duda na magkakaroon ka ng paksang "YAML vs. XML" at natural, kapag una mong nakita ang YAML, mas pipiliin mo ito kaysa sa XML dahil mas madaling magbasa at magsulat Gayunpaman, ang YAML ay dapat na isa pang tool sa arsenal ng isang developer at hindi dapat maging isang alternatibo sa XML. Narito ang ilang mga pakinabang ng YAML at XML.

Mga benepisyo ng YAML

  • Hindi gaanong detalyado, mas madaling buuin at mas nababasa
  • Walang istraktura ng puno na may isang parent node

Mga pakinabang ng XML

  • Higit pang built-in na suporta para sa PHP kumpara sa YAML
  • Ang XML ay naging de facto na pamantayan para sa komunikasyon sa pagitan ng mga aplikasyon ng komunikasyon
  • Ang mga XML tag ay maaaring magkaroon ng mga katangian na nagbibigay ng mas detalyadong impormasyon tungkol sa pribadong data

Bagama't verbose, mas nababasa at napanatili ang XML kapag malalim ang hierarchy ng elemento kumpara sa representasyon ng hierarchy na nakabatay sa espasyo ng YAML.

Isinasaalang-alang ang mga pakinabang sa parehong wika, ang YAML ay tila mas angkop para sa pagkolekta ng iba't ibang set ng data at kapag ang mga tao ay isa rin sa mga consumer ng data.

Piliin ang Parser PHP YAML

Ang YAML parser ay may dalawang functionality, isang uri ng load function na nagko-convert ng YAML sa isang array, at isang dump function na nagko-convert ng array sa YAML.

Kasalukuyang PHP YAML parser, available bilang PECL extension at hindi kasama ng PHP. Bilang karagdagan, may mga analyzer na nakasulat sa purong PHP, na magiging bahagyang mas mabagal kumpara sa PECL extension.

Nasa ibaba ang ilang YAML parser para sa PHP:

  • Hindi kasama ng PHP
  • Nangangailangan ng root access sa server para sa pag-install
  • Ipinatupad sa PHP
  • Gagana sa PHP 5.2.4+
  • Kailangang kunin ang mga balangkas mula sa Symfony
  • Ipinatupad sa PHP
  • Gagana sa PHP 5.3.2+
  • Ipinatupad sa PHP
  • Gagana sa PHP 5+

Mas gusto kong piliin ang Symfony 1.4 YAML component dahil sa portability (ito ay gumagana sa PHP 5.2.4+) at redemption (Symfony 1.4 at PHP framework na naka-install). Kapag nakuha mo na ang archive ng YAML ng mga bahagi ng Symfony, magagamit ang mga klase ng YAML sa ilalim ng lib/yaml . Ang mga static na pamamaraan na load() at dump() ay makukuha mula sa sfYaml class.

Pagsasama sa proyekto ng Parser PHP YAML

Sa tuwing kailangan mong isama ang isang third party na klase o library sa iyong proyekto sa PHP, isang magandang kasanayan ang gumawa ng wrapper at mga pagsubok. Ang pagpapalit ng isang third-party na library na may kaunting pagbabago sa project code (ang shell lang ang dapat ilapat sa project code) at may kumpiyansa na ang mga pagbabago ay hindi magpapabagal sa anumang functionality (mga pagsubok).

Nasa ibaba ang isang pagsubok (YamlParserTest.php) na ginawa para sa klase ng wrapper nito (YamlParser.php). Kinakailangang tumakbo at mapanatili ang pagsubok. Maaari kang magdagdag ng maraming pagsubok kung gusto mo, para sa mga di-wastong pangalan ng file at mga extension ng file maliban sa .yml , at iba pang mga pagsubok batay sa mga script na nakatagpo mo sa iyong proyekto.

yamlParser = bagong YamlParser();"; $content = "YAML is a less-verbose data serialization format. " . "It stands for \"YAML Ain"t Markup Language\". " . "YAML has been a popular data serialization format among " . "software developers mainly because it"s human-readable.\n"; $expectedArticle = array("id" => 1, "title" => $title, "content" => $content, "author" => 1, "status" => 2); $this->assertEquals($expectedArticle, $actualArticle); } /** * @expectedException YamlParserException */ public function testExceptionForWrongSyntax() { $this->yamlParser->load("wrong-syntax.yml"); } }?> !}

) public function testMainArrayKeys() ($parsedYaml = $this->yamlParser->load("article.yml"); $mainArrayKeys = array_keys($parsedYaml); $expectedKeys = array("author", "category", "article ", "articleCategory"); $this->assertEquals($expectedKeys, $mainArrayKeys); ) public function testSecondLevelElement() ( $parsedYaml = $this->yamlParser->load("article.yml"); $actualArticle = $ parsedYaml["artikulo"]; $title = "Paano Gamitin ang YAML sa Iyong Susunod na Proyekto sa PHP

At narito ang klase ng wrapper:< 0) { parent::__construct($message, $code); } else { parent::__construct($message, $code, $previous); } } }?>

getMessage(), $e->getCode(), $e);

) ) public function dump($array) ( try ( return sfYaml::dump($array); ) catch (Exception $e) ( throw new YamlParserException($e->getMessage(), $e->getCode(), $e); ) ) ) class na YamlParserException ay nagpapalawak ng Exception ( public function __construct($message = "", $code = 0, $previous = NULL) ( if (version_compare(PHP_VERSION, "5.3.0")

P.S.

Kaya ngayon ay mayroon kang kaalaman tungkol sa kung ano ang YAML, at kung paano kumatawan sa mga array ng PHP sa YAML, pati na rin isama ang PHP YAML parser sa iyong mga proyekto. Sa pamamagitan ng paggugol ng kaunting oras sa YAML syntax, mauunawaan mo ang potensyal ng mga posibilidad na ibinibigay nito. Maaari mo ring isaalang-alang ang pag-aaral ng Symfony 1.4 at 2, na gumagawa ng malawakang paggamit ng YAML.

Ang JSON (JavaScript Object Notation) ay isang format ng text data exchange batay sa JavaScript at karaniwang ginagamit sa wikang ito. Tulad ng maraming iba pang mga format ng teksto, ang JSON ay madaling basahin ng mga tao. Sa kabila ng mga pinagmulan nito sa JavaScript (mas tiyak, mula sa isang subset ng wika ng 1999 ECMA-262 standard), ang format ay itinuturing na independiyenteng wika at maaaring gamitin sa halos anumang programming language. Para sa maraming wika, mayroong handa na code para sa paggawa at pagproseso ng data sa JSON na format.

Ang YAML ay isang format ng serialization ng data na nababasa ng tao, na malapit sa mga markup na wika, ngunit nakatuon sa kaginhawahan ng input-output ng mga tipikal na istruktura ng data ng maraming programming language. Ang pangalang YAML ay isang recursive acronym para sa YAML Ain't Markup Language (“YAML is not a markup language” Ang pangalan ay sumasalamin sa kasaysayan ng pag-unlad: sa mga unang yugto ang wika ay tinawag na Yet Another Markup Language (“Another Markup Language”). ”) at itinuring pa rin bilang isang katunggali na XML, ngunit pinalitan ng pangalan nang maglaon upang bigyang-diin ang data sa halip na markup ng dokumento.

Kaya kung ano ang kailangan namin:

  • gawin ang parehong kumplikadong JSON at YAML
  • tukuyin ang mga parameter kung saan tayo maghahambing
  • Deserialize ang mga bagay sa Java nang halos 30 beses
  • ihambing ang mga resulta ng bilis
  • ihambing ang pagiging madaling mabasa ng file
  • ihambing ang kadalian ng paggamit sa format

Malinaw, hindi kami magsusulat ng sarili naming mga parser, kaya pipili muna kami ng umiiral na parser para sa bawat format.
Para sa json gagamitin namin ang gson (mula sa google), at para sa yaml gagamit kami ng snakeyaml (mula sa hindi ko alam kung kanino).

Tulad ng nakikita mo, ang lahat ay simple, kailangan mo lamang lumikha ng isang medyo kumplikadong modelo na gayahin ang pagiging kumplikado ng mga config file, at magsulat ng isang module na susubukan ang yaml at json parsers. Magsimula na tayo.
Kailangan namin ng modelo na humigit-kumulang sa kumplikadong ito: 20 attribute ng iba't ibang uri + 5 koleksyon ng 5-10 elemento bawat isa + 5 nested object ng 5-10 elemento bawat isa at 5 koleksyon.
Ang yugtong ito ng buong paghahambing ay maaaring ligtas na matawag na pinaka nakakapagod at hindi kawili-wili. Ang mga klase ay nilikha gamit ang mga tahimik na pangalan tulad ng Model, Emdedded1, atbp. Ngunit hindi namin hinahabol ang pagiging madaling mabasa ng code (kahit sa bahaging ito), kaya hahayaan namin ito sa ganoong paraan.

file.json

"embedded2": ( "strel1": "el1", "strel2": "el2", "strel4": "el4", "strel5": "el5", "strel6": "el6", "strel7": " el7", "intel1": 1, "intel2": 2, "intel3": 3, "list1": [ 1, 2, 3, 4, 5 ], "list2": [ 1, 2, 3, 4, 5, 6, 7 ], "list3": [ "1", "2", "3", "4" ], "list4": [ "1", "2", "3", "4", "5", "6" ], "map1": ( "3": 3, "2": 2, "1": 1), "map2": ( "1": "1", "2": "2", "3": "3"))


file.yml

naka-embed2: intel1: 1 intel2: 2 intel3: 3 list1: - 1 - 2 - 3 - 4 - 5 list2: - 1 - 2 - 3 - 4 - 5 - 6 - 7 list3: - "1" - "2" - "3" - "4" list4: - "1" - "2" - "3" - "4" - "5" - "6" map1: "3": 3 "2": 2 "1": 1 mapa2: 1: "1" 2: "2" 3: "3" strel1: el1 strel2: el2 strel4: el4 strel5: el5 strel6: el6 strel7: el7


Sumasang-ayon ako na ang pagiging madaling mabasa ng tao ay medyo subjective na parameter. Ngunit gayon pa man, sa aking opinyon, ang yaml ay medyo mas kasiya-siya sa mata at mas madaling maunawaan.

yaml parser

Ang pampublikong klase na BookYAMLParser ay nagpapatupad ng Parser ( String filename; public BookYAMLParser(String filename) ( this.filename = filename; ) @Override public void serialize(Book book) ( subukan ( DumperOptions options = bagong DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); Yaml yaml = bagong Yaml(mga opsyon); bagong FileWriter(filename); yaml.dump(book, writer.close(); subukan ( InputStream input = bagong FileInputStream(new File(filename)); Yaml yaml = new Yaml(); Book data = (Book) yaml.load(input); input.close(); return data; ) catch (FileNotFoundException e ) ( e.printStackTrace(); ) catch (YamlException e) ( e.printStackTrace(); ) catch (IOException e) ( e.printStackTrace(); ) catch (Exception e) ( String message = " Exception in file " + filename + ", "; throw new Exception(message + e.getMessage() ) return null );

json parser

Ang pampublikong klase na BookJSONParser ay nagpapatupad ng Parser ( String filename; public BookJSONParser(String filename) ( this.filename = filename; ) @Override public void serialize(Book book) ( Gson gson = new GsonBuilder().setPrettyPrinting().create();; try ( FileWriter writer = bagong FileWriter(filename); String json = gson.toJson(libro); writer.close(); ; subukan ( BufferedReader br = bagong BufferedReader(new FileReader(filename)); JsonReader jsonReader = bagong JsonReader(br); Book book = gson.fromJson(jsonReader, Book.class); return book ; ) catch (IOException e) ( e .printStackTrace( ) return null ) )

Tulad ng nakikita natin, ang parehong mga format ay suportado sa java. Ngunit para sa json ang pagpipilian ay mas malawak, ito ay hindi maikakaila.
Ang mga parser ay handa na, ngayon tingnan natin ang pagpapatupad ng paghahambing. Dito, masyadong, ang lahat ay sobrang simple at halata. Mayroong isang simpleng paraan na nagde-deserialize ng mga bagay mula sa isang file nang 30 beses. Kung sinuman ang interesado, ang code ay nasa ilalim ng spoiler.

pagsubok na code

public static void main(String args) ( String jsonFilename = "file.json"; String yamlFilename = "file.yml"; BookJSONParser jsonParser = bagong BookJSONParser(jsonFilename); jsonParser.serialize(bagong Aklat("pangalan", "123-123-123"), 123, "dfsas")); BookYAMLParser yamlParser = bagong BookYAMLParser(yamlFilename); , "dfsas")); //json deserialization StopWatch stopWatch = new StopWatch();< LOOPS; i++) { Book e = jsonParser.deserialize(); } stopWatch.stop(); System.out.println("json worked: " + stopWatch.getTime()); stopWatch.reset(); //yaml deserialization stopWatch.start(); for (int i = 0; i < LOOPS; i++) { Book e; e = yamlParser.deserialize(); } stopWatch.stop(); System.out.println("yaml worked: " + stopWatch.getTime()); }

Bilang resulta, nakukuha namin ang sumusunod na resulta:
json nagtrabaho: 278 yaml nagtrabaho: 669

Tulad ng nakikita mo, ang mga json file ay na-parse ng humigit-kumulang tatlong beses na mas mabilis. Ngunit ang ganap na pagkakaiba ay hindi kritikal sa aming sukat. Samakatuwid, ito ay hindi isang malakas na plus sa pabor ng json.
Nangyayari ito dahil ang json ay na-parse on the fly, iyon ay, binabasa ito ng character ayon sa character at agad na na-save sa isang object. Ito ay lumiliko na ang bagay ay nabuo sa isang pass sa pamamagitan ng file. Sa katunayan, hindi ko alam kung paano eksaktong gumagana ang parser na ito, ngunit sa pangkalahatan ang pamamaraan ay ganito.
At ang yaml naman ay mas nasusukat. Ang yugto ng pagproseso ng data ay nahahati sa 3 yugto. Una, ang isang puno ng mga bagay ay itinayo. Pagkatapos ito ay binago sa ilang paraan. At pagkatapos lamang ng yugtong ito ay na-convert ito sa mga kinakailangang istruktura ng data.

Isang maliit na comparative table ("+" - advantage, "-" - lag, "+-" - walang halatang bentahe):

Paano ito maibubuod?
Ang lahat ay malinaw dito, kung ang bilis ay mahalaga sa iyo - pagkatapos ay json, kung ang pagiging madaling mabasa ng tao - yaml. Kailangan mo lang magpasya kung ano ang mas mahalaga. Para sa amin ito pala ang pangalawa.
Sa katunayan, maraming iba pang mga argumento ang maaaring ibigay dito na pabor sa bawat isa sa mga format, ngunit naniniwala ako na ang dalawang puntong ito ay ang pinakamahalaga pa rin.

Dagdag pa, kapag nagtatrabaho sa yaml, kailangan kong harapin ang hindi masyadong magandang paghawak ng exception, lalo na para sa mga error sa syntax. Gayundin, kailangan kong subukan ang iba't ibang mga aklatan ng yaml. Sa wakas, kinailangan na magsulat ng ilang uri ng pagpapatunay. Sinubukan namin ang pagpapatunay gamit ang mga schemas (kung saan kailangan naming tawagan ang Ruby gems), at bean validation batay sa jsr-303. Kung interesado ka sa alinman sa mga paksang ito, ikalulugod kong sagutin ang iyong mga katanungan.
Salamat sa iyong pansin :)

getMessage(), $e->getCode(), $e);
Sa pagtatapos ng pagsulat ng artikulo ay nakita ko ang sumusunod na paghahambing ng yaml at json.

Stanislav Shashalevich

Ang content parser ay ang aming pandaigdigan at advanced na solusyon na nagbibigay-daan sa iyong mag-parse ng mga katalogo, pahina at RSS feed. Mukhang, ano pa ang mahihiling mo sa modyul na ito?! Ngunit hindi iyon ang kaso. Ang aming mga kliyente ay hindi tumitigil at patuloy na hinihiling sa amin na bumuo ng mga solusyon. At masaya lang kami tungkol dito. At ngayon gusto naming ipahayag na natugunan namin ang isa pang napakahalagang kahilingan mula sa aming mga kliyente: Pag-parse ng mga XML file. Ngayon ang Parser ay maaaring gumana hindi lamang sa rss, pahina, katalogo mga uri ng data, ngunit pati na rin sa xml. At ang pinakamahalaga: ang pagpapatupad ng naturang kapaki-pakinabang na pag-andar ay hindi makakaapekto sa gastos ng solusyon sa anumang paraan. Presyo ng solusyon sa 14 990 kuskusin. mananatiling hindi magbabago.

Pag-parse xml Binibigyang-daan ka ng mga file na i-parse ang isang kapaki-pakinabang na format para sa mga online na tindahan gaya ng YML mga file. kaya lang xml ang parser ay naka-configure para sa pag-parse bilang default yml pagpapalabas. Ngunit maaaring may tanong kaagad ang aming mga kliyente: Ano ang iyong pag-download? YML ang mga file ay naiiba sa mga katulad na solusyon sa Marketplace. Narito ang isang listahan ng ilang mga pakinabang ng aming module sa mga analogue:

  • ang kakayahang mag-convert at muling magkalkula ng mga pera
  • posibilidad ng pagbabago ng mga presyo
  • kakayahang mag-edit ng mga pangalan at katangian ng produkto
  • kakayahang tukuyin ang mga default na katangian
  • posibilidad ng awtorisasyon sa isang third-party na server
  • magsagawa ng iba't ibang mga aksyon sa mga elemento na wala sa kasalukuyang pag-upload (walang gawin, tanggalin, i-deactivate)
  • awtomatikong pagsasalin ng teksto
  • posibilidad ng pana-panahong paglulunsad (mga ahente, mga korona)
  • kakayahang tukuyin ang mga patlang at katangian na ia-update
  • posibilidad ng paggamit ng proxy server
Kung ihahambing natin ang pag-parse xml Sa katalogo, pagkatapos ay i-parse xml Mas simple na ito sa unang tingin: mas kaunting mga tab, field at iba pang impormasyon. Ang bilis ng pag-load ng impormasyon ay mas mabilis din, dahil walang maraming mabibigat na kahilingan sa mga third-party na site.

Ang kakanyahan ng pag-parse ay nananatiling pareho: pagproseso xml napupunta ang file sa pamamagitan ng mga tagapili at katangian. Kaya, kung na-configure mo na ang parser katalogo, pagkatapos ay ang pagse-set up ng bagong uri ng parser ay magiging simple at madali para sa iyo.

Ngayon tingnan natin ang paggana ng bagong uri ng data:

Tab ng parser:

Uri ng parser– ayon dito, mayroong isang uri ng parser: rss, page, catalog, xml

Parser mode– ang mode kung saan gumagana ang parser. Mayroong dalawang operating mode: debug at work. Bilang default, ginagamit ang debug mode para sa pag-debug. Nasa mode na ito na dapat i-configure ang parser. Sa debug mode, ang unang 30 elemento ng XML file ay na-parse.

Kapansin-pansin na kung gagamitin mo ang module na "Content Parser" sa trial na bersyon, gagana lang ang parser sa debug mode.

Mga karagdagang URL ng XML file- maaari mo ring isama ang iba pang mga URL ng xml file sa pag-upload. Upang gawin ito, ipasok lamang ang mga ito sa isang bagong linya.

Block ID ng impormasyon ng catalog– isang bloke ng impormasyon kung saan ilo-load ang mga seksyon at produkto.

ID ng Seksyon– seksyon ng bloke ng impormasyon kung saan ilo-load ang mga seksyon at produkto.

Bilang ng mga produktong na-unload sa isang hakbang ng parser– ang bilang ng mga produkto na pinoproseso ng parser sa isang hakbang. Default 300

Hakbang ng parser– isang konsepto na nangyayari kapag manu-manong inilunsad ang parser. Sa kasong ito, ang bawat hakbang ay nagsasangkot ng pagdiskonekta at muling pagkonekta sa upload channel. Ibahin ang halagang ito depende sa iyong mga kakayahan sa pagho-host. Kung ang parser ay tumatakbo mula sa isang ahente (korona), kung gayon ang hakbang ng parser ay hindi papansinin, at ang pagbabawas ay isinasagawa sa isang kahilingan.

Aktibo, Pag-uuri, Pamagat, Huling oras ng pagtakbo- ang mga patlang ay madaling maunawaan at hindi nangangailangan ng mga komento.

Encoding- pag-encode ng xml file. Lumang field. Sa ngayon, ang pag-encode ay awtomatikong tinutukoy, ngunit kung mayroong anumang mga problema sa pag-encode, inirerekomenda na tukuyin ito nang manu-mano.

Tab ng mga pangunahing setting - Mga Kategorya

Halimbawang XML file para sa mga kategorya:

Tagapili ng katangian ng pangalan ng kategorya– nagpapahiwatig ng landas patungo sa pangalan ng kategorya. Kung walang laman, ang pangalan ay kinuha mula sa halaga ng kategorya mismo

Attribute selector na naglalaman ng category id– landas patungo sa id ng kategorya.

Attribute selector na naglalaman ng id ng parent category– upang ayusin ang nesting ng mga seksyon, dapat mong tukuyin ang let sa halaga ng parent category id.

Tab ng mga pangunahing setting - Mga Produkto

Halimbawa ng XML file para sa mga produkto:

Partikular na tagapili ng produkto– landas patungo sa lalagyan ng isang partikular na produkto

Attribute selector na naglalaman ng product id– landas sa product id

Tagapili ng katangian ng pangalan ng produkto– landas patungo sa pangalan ng produkto

Tagapili ng katangian ng presyo– lalagyan na naglalaman ng halaga ng presyo ng produkto

Tagapili ng katangian ng paglalarawan- naglalaman ng isang paglalarawan ng produkto

Selector-attribute na preview na larawan– landas patungo sa larawan

Detalyadong tagapili ng katangian ng larawan– landas patungo sa larawan

Tab na Properties

Karagdagang ari-arian mga larawan- kung may karagdagang mga larawan, pagkatapos ay kailangan mong tukuyin ang mga patlang kung saan ia-upload ang mga larawan.

Selector-attribute ng karagdagang enumeration. mga larawan– ang tagapili at karagdagang katangian ay ipinahiwatig. mga larawan. Halimbawang larawan. Tinukoy na nauugnay sa tagapili ng produkto.

Default na mga halaga ng ari-arian– maaari mong tukuyin ang mga halaga ng ari-arian na awtomatikong ilalagay bilang default kapag lumilikha ng mga produkto

Pag-parse sa pamamagitan ng selector– maaari mong tukuyin ang isang partikular na tagapili ng ari-arian na nasa loob ng tagapili ng produkto sa xml. Halimbawa: vendor, barcode

Tanggalin ang mga character– maaari mo ring alisin ang mga hindi kinakailangang character sa mga katangian (mga yunit ng pagsukat, atbp.)

Pag-parse ng property at awtomatikong paggawa- nagbibigay-daan sa iyong awtomatikong lumikha, punan at i-update ang mga katangian na nakalista sa xml file.

Sa kasong ito, ang mga katangian ay natatangi ayon sa pangalan.

Awtomatikong paglikha ng mga ari-arian– kung ang checkbox ay naka-check, kung gayon kung ang ari-arian ay hindi umiiral, ito ay malilikha. Kung ang ari-arian ay umiiral na

Tagapili ng attribute ng enumeration ng property– isang pangkalahatang tagapili na naglalaman ng impormasyon tungkol sa ari-arian

Tagapili ng katangian ng pangalan ng property– path kung saan matatagpuan ang pangalan ng property. Ipinapaalala namin sa iyo na ito ay isang mahalagang parameter, dahil ang uniqueization sa kasong ito ay batay sa parameter na ito.

Tagapili ng katangian ng halaga ng ari-arian– landas patungo sa halaga ng ari-arian. Kung walang tinukoy, direktang kukunin ang value mula sa tagapili ng property

Piliin ang uri ng mga property na gagawin– kung ang mga katangian ay hindi ginawa, sila ay malilikha. Dapat mong piliin ang uri ng mga bagong katangian mula sa mga halaga: Listahan o String.

Tanggalin ang mga character– nagbibigay-daan sa iyong alisin ang mga hindi kinakailangang character mula sa mga katangian.

Magdagdag/mag-alis ng mga simbolo ng field at property– functionality na nagbibigay-daan sa iyong magdagdag at mag-alis ng mga simbolo at pangalan ng isang produkto, pati na rin ang mga katangian nito.

Mga tab Katalogo ng kalakalan, Mga karagdagang setting, Mga Update/natatangi, Mga Log, Mga tagubilin sa video kapareho ng uri ng parser katalogo. Samakatuwid, hindi namin isasaalang-alang ang mga ito nang detalyado.

Tab ng Trade Catalog

Binibigyang-daan ka ng tab na flexible na magtrabaho sa mga presyo:

Tukuyin ang mga parameter ng presyo at pera

I-convert ang pera

Baguhin ang mga presyo

Mga bilog na presyo

Mga karagdagang tab na setting:

Tab ng Update/Pagiging Kakaiba:

Binibigyang-daan ka ng tab na magtakda ng mga parameter ng uniqueness, pati na rin ang pag-configure ng pag-update ng mga field ng produkto.

(PECL yaml >= 0.4.0)

yaml_parse — Nag-parse ng stream ng YAML

Paglalarawan

yaml_parse (string $input [, int $pos = 0 [, int &$docs [, array $callbacks = NULL ]]]) : pinaghalo

Kino-convert ang lahat o bahagi ng isang stream ng YAML at isinusulat ito sa isang variable.

Listahan ng mga parameter

Linya para sa pag-parse bilang isang stream ng YAML.

Dokumento para sa pag-parse ( -1 para sa lahat ng mga dokumento, 0 para sa unang dokumento, ...).

Kung natagpuan ang mga ndoc, papalitan ito ng bilang ng mga dokumento sa stream ng YAML.

Ibalik ang mga halaga

Ibinabalik ang value na naka-encode sa input sa naaangkop na uri ng PHP o MALI sa kaso ng isang error. Kung ang parameter ng pos ay katumbas ng -1 , ibabalik ang isang array na naglalaman ng isang entry para sa bawat dokumentong makikita sa stream.

Mga halimbawa

Halimbawa #1 Halimbawa ng paggamit yaml_parse()

$yaml =<<---
invoice: 34843
petsa: "2001-01-23"
bill-to: &id001
ibinigay: Chris
pamilya: Dumars
address:
mga linya: |-
458 Walkman Dr.
Suite #292
lungsod: Royal Oak
estado: MI
postal: 48046
site: zxibit.esy.es
ship-to: *id001
produkto:
- sku: BL394D
dami: 4
paglalarawan: Basketbol
presyo: 450
- sku: BL4438H
dami: 1
paglalarawan: Super Hoop
presyo: 2392
buwis: 251.420000
kabuuan: 4443.520000
komento: Ang gabi ay pinakamainam. Ang backup na contact ay si Nancy Billsmer @ 338-4338.
...
EOD;

$parsed = yaml_parse ($yaml);
var_dump ($parsed);
?>

Ang resulta ng pagpapatakbo ng halimbawang ito ay magiging ganito:

array(8) ( ["invoice"]=> int(34843) ["petsa"]=> string(10) "2001-01-23" ["bill-to"]=> &array(3) ( [" ibinigay"]=> string(5) "Chris" ["pamilya"]=> string(6) "Dumars" ["address"]=> array(4) ( ["linya"]=> string(34) " 458 Walkman Dr. Suite #292" ["city"]=> string(9) "Royal Oak" ["state"]=> string(2) "MI" ["postal"]=> int(48046) ) [ "ship-to"]=> &array(3) ( ["given"]=> string(5) "Chris" ["family"]=> string(6) "Dumars" ["address"]=> array ( 4) ( ["lines"]=> string(34) "458 Walkman Dr. Suite #292" ["city"]=> string(9) "Royal Oak" ["state"]=> string(2) " MI" ["postal"]=> int(48046) ) ) ["product"]=> array(2) ( => array(4) ( ["sku"]=> string(6) "BL394D" [ " dami"]=> int(4) ["paglalarawan"]=> string(10) "Basketball" ["presyo"]=> int(450) ) => array(4) ( ["sku"]=> string (7) "BL4438H" ["dami"]=> int(1) ["paglalarawan"]=> string(10) "Super Hoop" ["presyo"]=> int(2392) ) ) ["buwis" ] => float(251.42) ["kabuuan"]=> float(4443.52) ["comments"]=> string(68) "Mas maganda ang hapon. Ang backup na contact ay si Nancy Billsmer @ 338-4338." )

Binibigyang-daan ka ng plugin na mag-import ng mga produkto mula sa iba pang mga tindahan sa pamamagitan ng Yandex XML feed, na ginagamit ng mga tindahan upang mangalakal sa Yandex.Market.
Ang mga produkto ay ini-import sa istraktura ng plugin ng WP Shop. Mayroong awtomatikong pag-synchronize ng mga produkto sa pinagmulan, na maaaring ilunsad nang manu-mano o sa pamamagitan ng cron.
Isang kailangang-kailangan na tool para sa:
1. Paglilipat ng tindahan mula sa anumang iba pang mga makina sa WordPress WP-Shop
2. Pagbuo ng mga kaakibat na tindahan upang kumita ng pera sa mga komisyon ng kaakibat gamit ang modelo ng CPS

Ang application ay nangangailangan ng IonCube Loader upang gumana!

Arbitrary na seksyon 1

Mga Madalas Itanong

Mga Tagubilin sa Pag-install
  1. Mag-upload ng plugin na "WP Shop YML Parser" sa /wp-content/plugins/ directory
  2. I-activate ang plugin na "WP Shop YML Parser" sa pamamagitan ng menu ng 'Mga Plugin' sa WordPress
  3. Tingnan ang buong userguide kung paano i-set up ang iyong “WP Shop YML Parser”
Isang katanungan na maaaring mayroon ang isang tao

Bisitahin ang site na wp-shop.ru para sa tulong.

Mga pagsusuri

Huwag makipag-ugnayan sa mga developer na ito sa anumang sitwasyon o bumili ng kahit ano mula sa kanila. Ang pagpapaandar na ipinangako nila sa pro na bersyon ay isang kasinungalingan. Kukunin lang nila ang iyong pera at pagkatapos ay tatanggihan ang lahat, kasama ang suporta. Tingnan lamang ang kanilang baluktot na website at kalahating buhay na dokumentasyon at maiintindihan mo ang lahat sa iyong sarili!

Changelog

Bersyon: 0.9
-project_as_field
-id_as_field

Bersyon: 0.8
-template_price (pasadyang tag ng presyo)

Bersyon: 0.7
-fields_update — bagong setting para i-update ang mga custom na field sa mga proyekto

Bersyon: 0.6
-Sample xml parser pinalitan ng SAX parser na mas mahusay para sa pamamahala ng memorya

Bersyon: 0.5
-mga pagpapabuti

Bersyon: 0.4
-maramihang pagsusuri
-clone ang proyekto ayon sa kategorya

Bersyon: 0.3
-link sa mga doc

Bersyon: 0.2
-Paganahin ang mga lokal na feed
- pinagmulan bilang paganahin ang file
- mga pagpipilian sa karagdagan yml

Bersyon: 0.1
-paunang paglabas