

Nextrek
@ 1048
Nextrek / legal-map / ajax / treeSearch.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
<?php /* Parametri: - filename: file xml da caricare; - idpadre: l'id padre del nodo da cui devono essere caricati i nodi figli (se nullo restituisce solo i nodi radice) */ $json_nodes = array(); $json_nodes["nodes"] = array(); $searchQuery = strtolower(preg_replace('/[^\p{L}[:alnum:]]/u', ' ', $_REQUEST["search"])); $searchAll = preg_split('/\s+/', $searchQuery); $searchWords = array_filter($searchAll, function($value) { return strlen($value) > 2; }); if (count($searchWords) == 0) die(json_encode($json_nodes)); $oper = ''; $xpathQueryContains = ""; foreach ($searchWords as $search) { $xpathQueryContains .= $oper . 'contains(translate(., "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"),"'.$search.'")'; $oper = ' or '; } $xml = simplexml_load_file(dirname(__FILE__)."/../xml/".$_REQUEST["filename"].".xml", 'SimpleXMLElement', LIBXML_NOCDATA); $xpathQuery = '//NODO[descendant-or-self::NODO[(ramodescrizione|descrizioneoriginale|descrizionealbero)[' . $xpathQueryContains . ']]]'; $search_nodes = $xml->xpath($xpathQuery); //die(var_dump($search_nodes)); $searchStoreIdPadre = []; $searchStoreRamoId = []; foreach ($search_nodes as $key => $value) { $searchStoreRamoId[] = (integer)$value["ramoid"]; } //var_dump($searchStoreRamoId); function getChildren($idpadre) { global $xml; $xml_nodes = $xml->xpath('//NODO[@ramoid="' . $idpadre . '"]/NODO'); return $xml_nodes; } $xml_nodes = $xml->xpath('/ROOT/NODO'); function buildNode($value) { $node = array(); global $searchStoreRamoId; //var_dump($value); $node["id"] = (integer)$value->attributes()->ramoid; $node["level"] = (integer)$value->attributes()->level; $node["is_leaf"] = ($value->attributes()->leaf=="TRUE"); $node["ramodescrizione"] = (string)$value->ramodescrizione; $node["descrizioneoriginale"] = (is_object($value->descrizioneoriginale)) ? (string)$value->descrizioneoriginale[0] : (string)$value->descrizioneoriginale; $node["descrizionealbero"] = (string)$value->descrizionealbero; if ($node["is_leaf"]) { $node["ramodescrizione"] = str_replace("javascript:VisualizzaArticolo(", "javascript:VisualizzaArticolo(this,", $node["ramodescrizione"]); $node["descrizioneoriginale"] = str_replace("javascript:VisualizzaArticolo(", "javascript:VisualizzaArticolo(this,", $node["descrizioneoriginale"]); $node["descrizionealbero"] = str_replace("javascript:VisualizzaArticolo(", "javascript:VisualizzaArticolo(this,", $node["descrizionealbero"]); } else { $children = getChildren($node["id"]); foreach ($children as $child) { if (in_array((integer)$child->attributes()->ramoid, $searchStoreRamoId)) { $childNode = buildNode($child); $node["NODES"][] = $childNode; } } } return $node; } $nodeCount = 0; foreach ($xml_nodes as $key => $value) { $nodeCount++; if (in_array((integer)$value->attributes()->ramoid, $searchStoreRamoId)) { $node = buildNode($value); $node["catNode"] = $nodeCount; array_push($json_nodes["nodes"], $node); } } //die(var_dump($json_nodes)); echo json_encode($json_nodes); ?> |
Commits for Nextrek/legal-map/ajax/treeSearch.php
Revision | Author | Commited | Message |
---|---|---|---|
1048 |
![]() |
Wed 23 Dec, 2015 11:59:14 +0000 | Ricerca nell’indice xml |