PHP G!ds mini-applicatie

Uit G!ds
Ga naar: navigatie, zoeken


Op deze pagina wordt een mini-applicatie beschreven die gegevens uit de G!DS haalt en toont. De scripts zijn nadrukkelijk zo eenvoudig mogelijk gehouden, de gebruikte methoden kunnen dan ook niet als volledig of best-practice worden gezien. Dit voorbeeld is uitsluitend bedoeld om gebruik van de G!DS-data en functies te illustreren. Er wordt geen externe software gebruikt zodat het voorbeeld op elke PHP5 installatie kan werken.

De voorbeeldapplicatie is te downloaden op https://gids.bibliotheek.nl/website_tools/renderDemo/package.php
De applicatie is werkend te bekijken op https://gids.bibliotheek.nl/website_tools/renderDemo/


Een korte beschrijving van de verschillende PHP-scripts:

  • zoek.php
    Dit script zoekt naar organisaties met de 'zoekOverzichtOrganisaties' SOAP-call en toont de zoekresultaten met behulp van een XSLT.
  • organisatie.php
    Dit script haalt alle organisatiegegevens op met de soapcall 'haalOrganisatieAlsGml'. Vervolgens wordt een lijst met producten van de organisatie opgehaald met de soapcall ‘zoekOverzichtProducten’. Deze gegevens worden gecombineerd tot 1 XML-document dat gerenderd wordt met een XSLT.
  • product.php
    Dit script haalt productgegevens op via de soapcall 'haalProductAlsGml' en geeft deze weer met een XSLT.
  • instellingen.php
    Hierin staan gedeelde instellingen.


Documentation note.png Deze mini-applicatie werkt met Gml versie 1 dit is niet meer de meest recente of aangeraden versie. Zie ook GML documentatie.

Instellingen

Om de benodigde instellingen centraal beheerbaar te maken en niet terug hoeven laten komen in alle scripts zijn in het bestand 'instellingen.php' alle gedeelde instellingen opgenomen.

Het instellingen.php bestand:

  1. ini_set('soap.wsdl_cache_enabled', '1');
  2. ini_set('soap.wsdl_cache_ttl', 24*60*60);	
  3.  
  4. define('GIDS_PROFIEL_ID', 1234567890);        //<-- Vul hier het van de bibliotheek verkregen profielnummer in.
  5. define('GIDS_WEBSERVICES_URL', 'https://webservices.gids2.nl/GidsV2Core/');
  6.  
  7. $arr_soap_options = array( 
  8.   'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
  9.   'features'    => SOAP_SINGLE_ELEMENT_ARRAYS,
  10.   'trace'       => true,                      //<-- In een productie omgeving staat dit natuurlijk niet aan 
  11.   'login'       => 'WebsiteLoginNaam',        //<-- Wijzig hier de loginnaam in de van de VOB verkregen naam
  12.   'password'    => 'WebsiteWachtwoord'        //<-- Wijzig hier het wachtwoord in het van de VOB verkregen wachtwoord
  13. );

Weergeven van een product

Het ophalen en weergeven van een product gebeurt in het script 'product.php'.

  1. <?php
  2. /* +-----------------------------------------------------------------+
  3.  * |                                                                 |
  4.  * |     GGGGGGGGGGGG     IIII     DDDDDDDDDDDDD        SSSSSSSSS    |
  5.  * |   GGGGGGGGGGGGGG     IIII     DDDDDDDDDDDDDDD    SSSSS    SS    |
  6.  * |  GGGGG        G      IIII     DDDD      DDDDDD   SSSS           |
  7.  * |  GGGG                IIII     DDDD       DDDDD   SSSSS          |
  8.  * |  GGGG                IIII     DDDD        DDDD    SSSSSS        |
  9.  * |  GGGG       GGGGG    IIII     DDDD        DDDD      SSSSSS      |
  10.  * |  GGGG       GGGG     IIII     DDDD        DDDD         SSSSS    |
  11.  * |  GGGGG      GGGG     II       DDDD       DDDDD          SSSS    |
  12.  * |                                                                 |
  13.  * |                      IIII                                       |
  14.  * |                      IIII                                       |
  15.  * |                       I                                         |
  16.  * | G!DS is een product van de Vereniging van Openbare Bibliotheken |
  17.  * | http://www.debibliotheken.nl                                    |
  18.  * |                                                                 |
  19.  * | Gemaakt door:  AppSoftware                                      |
  20.  * | Email:         info@appsoftware.nl                              |
  21.  * | Web:           http://www.appsoftware.nl/                       |
  22.  * +-----------------------------------------------------------------+
  23.  * 
  24.  * Dit script haalt productgegevens op via de soapcall
  25.  * ‘haalProductAlsGml’ en geeft deze weer met een XSLT.
  26.  */
  27.  
  28. 	require 'instellingen.php';
  29.  
  30. 	if(!isset($_GET['product_id'])) {
  31. 		die('Het is nodig om een product_id op te geven');
  32. 	}
  33.  
  34. 	$int_prod_id = (int) $_GET['product_id'];
  35.  
  36. 	/* Initialiseer de soapclient om productgegevens op te halen.
  37. 	 * en haal de productgegevens op 
  38. 	 */ 		
  39. 	$obj_product_soap_client = @new SoapClient(GIDS_WEBSERVICES_URL.'productservice?wsdl', $arr_soap_options );
  40.  
  41. 	$obj_product_soap_resp 	= $obj_product_soap_client->haalProductAlsGml(array('productId'=>$int_prod_id));
  42.  
  43. 	/*	Render de verkregen data.
  44. 	 */		
  45. 	$obj_xml 	= new DOMDocument;	
  46. 	$obj_xml->loadXML($obj_product_soap_resp->return);
  47.  
  48. 	$obj_organisatie_xsl = new DOMDocument;
  49. 	$obj_organisatie_xsl->load('product.xsl');
  50.  
  51. 	$obj_proc 	= new XSLTProcessor;
  52. 	$obj_proc->importStyleSheet($obj_organisatie_xsl); 
  53.  
  54. 	header('Content-Type: text/html; charset=utf-8');
  55. 	echo $obj_proc->transformToXML($obj_xml);
  56.  
  57. 	//In $obj_soap_resp->return->resultCount staat het aantal resultaten als er geen maxResultaten zou zijn opgegeven !
  58. ?>

Weergeven van een organisatie

Dit script is iets complexer dan product.php. Er worden niet alleen organisatiegegevens opgehaald maar ook een lijst van de producten van de organisatie. Deze worden vervolgens samengevoegd tot één XML-document en met een XSLT-template gerenderd.

  1. <?php
  2. /* +----------------------------------------------------------------+
  3. * |                                                                 |
  4. * |     GGGGGGGGGGGG     IIII     DDDDDDDDDDDDD        SSSSSSSSS    |
  5. * |   GGGGGGGGGGGGGG     IIII     DDDDDDDDDDDDDDD    SSSSS    SS    |
  6. * |  GGGGG        G      IIII     DDDD      DDDDDD   SSSS           |
  7. * |  GGGG                IIII     DDDD       DDDDD   SSSSS          |
  8. * |  GGGG                IIII     DDDD        DDDD    SSSSSS        |
  9. * |  GGGG       GGGGG    IIII     DDDD        DDDD      SSSSSS      |
  10. * |  GGGG       GGGG     IIII     DDDD        DDDD         SSSSS    |
  11. * |  GGGGG      GGGG     II       DDDD       DDDDD          SSSS    |
  12. * |                                                                 |
  13. * |                      IIII                                       |
  14. * |                      IIII                                       |
  15. * |                       I                                         |
  16. * |                                                                 |
  17. * | G!DS is een product van de Vereniging van Openbare Bibliotheken |
  18. * | http://www.debibliotheken.nl                                    |
  19. * |                                                                 |
  20. * | Gemaakt door:  AppSoftware                                      |
  21. * | Email:         info@appsoftware.nl                              |
  22. * | Web:           http://www.appsoftware.nl/                       |
  23. * +-----------------------------------------------------------------+
  24. * 
  25. * Dit script haalt alle organisatie gegevens op met de soapcall
  26. * ‘haalOrganisatieAlsGml’. Vervolgens wordt een lijst met producten 
  27. * van de organisatie opgehaald met de soapcall ‘zoekOverzichtProducten’. 
  28. * Deze gegevens worden gecombineerd tot 1 XML-document dat gerenderd 
  29. * wordt met een xslt.
  30. */
  31.  
  32.  
  33.   require 'instellingen.php';
  34.  
  35.   if(!isset($_GET['organisatie_id'])) {
  36.     die('Het is nodig om een organisatie_id op te geven');
  37.   }
  38.  
  39.   $int_org_id = (int) $_GET['organisatie_id'];
  40.  
  41.   /* Initialiseer de soapclient om organisatiegegevens op te halen.
  42.   * en haal de organisatie gegevens op 
  43.   */     
  44.   $obj_organisatie_soap_client   = @new SoapClient(GIDS_WEBSERVICES_URL.'organisatieservice?wsdl', $arr_soap_options );
  45.   $obj_organisatie_soap_resp     = $obj_organisatie_soap_client->haalOrganisatieAlsGml(array('organisatieId'=>$int_org_id));
  46.  
  47.   $obj_organisatie_xml         = new DOMDocument;
  48.   $obj_organisatie_xml->loadXml($obj_organisatie_soap_resp->return);
  49.  
  50.   /* Initialiseer de soapclient om een lijst met producten van een organisatie op te halen.
  51.   * en haal de productgegevens op 
  52.   */   
  53.   $obj_zoek_soap_client       = @new SoapClient(GIDS_WEBSERVICES_URL.'zoekservice?wsdl', $arr_soap_options );
  54.   $obj_producten_soap_resp     = $obj_zoek_soap_client->zoekOverzichtProductenVanOrganisatieAlsGml(array(
  55.                       'query'            =>   '',
  56.                       'profielBeperkendFilter'   =>   'geimpliceerd:false',
  57.                       'organisatieId'        =>   $int_org_id,
  58.                       'sorteerVelden'        =>  array(
  59.                                       'SorteerVeld' => array(
  60.                                           'richting'    => 'DESC',
  61.                                           'veld'       => 'PUBLIEKSNAAM',
  62.                                           'volgnummer'   => 1
  63.                                         )
  64.                                       ),
  65.                       'maxResultaten'        => 1000,
  66.                       'startIndex'         => 0
  67.                     ));  
  68.  
  69.   /*  Voeg producten gml samen met organisatie gml
  70.   */
  71.   $obj_producten_xml   = new DOMDocument;  
  72.   $obj_producten_xml->loadXML('<producten/>');
  73.   if(isset($obj_producten_soap_resp->return->producten->string)) {
  74.     foreach($obj_producten_soap_resp->return->producten->string as $str_product_xml) {
  75.       $obj_product_xml   = new DOMDocument;  
  76.       $obj_product_xml->loadXML($str_product_xml);        
  77.  
  78.       // Voeg elke product GML toe aan root element producten
  79.       $obj_new_node = $obj_producten_xml->importNode($obj_product_xml->documentElement, true); 
  80.       $obj_producten_xml->documentElement->appendChild($obj_new_node);
  81.     }    
  82.   }
  83.  
  84.   // Voeg producten element toe aan organisatie gml
  85.   $obj_new_node = $obj_organisatie_xml->importNode($obj_producten_xml->documentElement, true);
  86.   $obj_organisatie_xml->documentElement->appendChild($obj_new_node);
  87.  
  88.   /*  Render de verkregen data.
  89.   */    
  90.   $obj_organisatie_xsl = new DOMDocument;
  91.   $obj_organisatie_xsl->load('organisatie.xsl');
  92.  
  93.   $obj_proc   = new XSLTProcessor;
  94.   $obj_proc->importStyleSheet($obj_organisatie_xsl); 
  95.  
  96.   header('Content-Type: text/html; charset=utf-8');
  97.   echo $obj_proc->transformToXML($obj_organisatie_xml);
  98.  
  99.   //In $obj_soap_resp->return->resultCount staat het aantal resultaten als er geen maxResultaten zou zijn opgegeven !
  100. ?>

Zoeken

  1. <?php
  2. /* +-----------------------------------------------------------------+
  3.  * |                                                                 |
  4.  * |     GGGGGGGGGGGG     IIII     DDDDDDDDDDDDD        SSSSSSSSS    |
  5.  * |   GGGGGGGGGGGGGG     IIII     DDDDDDDDDDDDDDD    SSSSS    SS    |
  6.  * |  GGGGG        G      IIII     DDDD      DDDDDD   SSSS           |
  7.  * |  GGGG                IIII     DDDD       DDDDD   SSSSS          |
  8.  * |  GGGG                IIII     DDDD        DDDD    SSSSSS        |
  9.  * |  GGGG       GGGGG    IIII     DDDD        DDDD      SSSSSS      |
  10.  * |  GGGG       GGGG     IIII     DDDD        DDDD         SSSSS    |
  11.  * |  GGGGG      GGGG     II       DDDD       DDDDD          SSSS    |
  12.  * |                                                                 |
  13.  * |                      IIII                                       |
  14.  * |                      IIII                                       |
  15.  * |                       I                                         |
  16.  * |                                                                 |
  17.  * | G!DS is een product van de Vereniging van Openbare Bibliotheken |
  18.  * | http://www.debibliotheken.nl                                    |
  19.  * |                                                                 |
  20.  * | Gemaakt door:  AppSoftware                                      |
  21.  * | Email:         info@appsoftware.nl                              |
  22.  * | Web:           http://www.appsoftware.nl/                       |
  23.  * +-----------------------------------------------------------------+
  24.  * 
  25.  * Dit script zoekt naar organisaties met de ‘zoekOverzichtOrganisaties’ soapcall 
  26.  * en toont de zoekresultaten met behulp van een xslt.
  27.  */
  28.  
  29.   require 'instellingen.php';
  30.  
  31.   $arr_organisaties     = array();
  32.   $str_query         = '';
  33.   $int_result_count     = 0;
  34.   $obj_organisaties_xml  = new DOMDocument;  
  35.  
  36.   if(isset($_GET['query'])) {
  37.  
  38.     $str_query = (string) $_GET['query'];
  39.  
  40.     /* Initialiseer de soapclient om een lijst met producten van een organisatie op te halen.
  41.      * en haal de productgegevens op 
  42.      */   
  43.     $obj_zoek_soap_client   = @new SoapClient(GIDS_WEBSERVICES_URL.'zoekservice?wsdl', $arr_soap_options );
  44.     $obj_zoek_soap_resp   = $obj_zoek_soap_client->zoekOverzichtOrganisatiesAlsGml(array(
  45.                       'query'      =>   $str_query,
  46.                       'profielId'    =>   GIDS_PROFIEL_ID,
  47.                       'sorteerVelden'  =>  array(
  48.                                   'SorteerVeld' => array(
  49.                                       'richting'    => 'DESC',
  50.                                       'veld'       => 'MATCH',
  51.                                       'volgnummer'   => 1
  52.                                   )
  53.                                 ),
  54.                       'maxResultaten'  => 1000,
  55.                       'startIndex'   => 0
  56.                     ));
  57.  
  58.  
  59.     $obj_organisaties_xml->loadXML('<organisaties/>');
  60.     if(isset($obj_zoek_soap_resp->return->organisaties->string)) {
  61.       foreach($obj_zoek_soap_resp->return->organisaties->string as $str_organisatie_xml) {
  62.         $obj_organisatie_xml   = new DOMDocument;  
  63.         $obj_organisatie_xml->loadXML($str_organisatie_xml);        
  64.  
  65.         // Voeg elke product GML toe aan root element producten
  66.         $obj_new_node = $obj_organisaties_xml->importNode($obj_organisatie_xml->documentElement, true); 
  67.         $obj_organisaties_xml->documentElement->appendChild($obj_new_node);
  68.       }  
  69.     }
  70.  
  71.     $int_result_count = $obj_zoek_soap_resp->return->resultCount;
  72.   }
  73.  
  74.   /*  Render de verkregen data.
  75.    */    
  76.   $obj_organisatie_xsl = new DOMDocument;
  77.   $obj_organisatie_xsl->load('zoek.xsl');
  78.  
  79.   $obj_proc   = new XSLTProcessor;
  80.   $obj_proc->setParameter('', 'query',     $str_query);
  81.   $obj_proc->setParameter('', 'result_count', $int_result_count);
  82.   $obj_proc->importStyleSheet($obj_organisatie_xsl); 
  83.  
  84.   header('Content-Type: text/html; charset=utf-8');
  85.  
  86.   echo $obj_proc->transformToXML($obj_organisaties_xml);
  87. ?>