Napojení Joomla! webů na další systémy

Viktor Jelínek

viktor@easy.cz

Proč propojovat?


  • Automatizace procesů
  • Uživatelé jsou zvyklí na své aplikace
  • Joomla je CMS, nikoli CML
  • Usnadnění implementace funkčnosti její delegací
  • Spolupráce open source webu s komerčními a closed source aplikacemi

Co třeba?


  • Účetní a skladové systémy
  • CRM a PM systémy
  • Rezervační systémy
  • Brány (platební, sms)
  • On-line služby
  • Mobilní aplikace
 

Odkud kam?

  • Do Joomly
  • Z Joomly
  • Obousměrně

Kdy?

  • Automaticky
  • Hned
  • Periodicky
  • Na kliknutí

Kolik?

  • Jednotlivě
  • Dávkově
  • Rozdílově
  • Kompletně

&

Technologie

Formáty

  • XML
  • JSON
  • HTTP
  • CSV
  • SQL
  • SOAP
  • RPC
  • REST
  • Javascript
  • cURL
  • FTP
  • Cron
  • Sdílená DB

Úskalí


  • Zabezpečení
  • Logování
  • Relace
  • Výpadky
  • Rychlost
  • Kolize

Časté integrace v Joomle


  • Core
      • users
      • content
  • Extensions
      • e-commerce
      • forms
      • social

Implementace do Joomly


  • Scripty
  • Nová rozšíření
  • Úpravy rozšíření
  • Rozšíření pro rošíření
  • Knihovny (pro vývojáře)

Scripty

Obvykle slouží jen jako doňující vrstva k dalším rozšířením

nebo třeba pro jednoduchý či jednorázový import/export


Výhody:

  • Jednoduchost implementace
  • Performance
  • Můžou být nezávislé na frameworku


Nevýhody:

  • Absence administrace
  • Nepořádek v souborech
  • Manuální "instalace"


Tvorba nových rošíření


  • File
      • lze použít pro scripty, aby šli (od)instalovat
  • Pluginy
      • sync uživatelů
      • sync objednávek
  • Moduly
      • zobrazovaní externích dat
      • konktatní a jiné formuláře
  • Komponenty
      • ecommerce řešení
      • složitější workflow
      • udržování relací mezi systémy
  • Knihovny
      • podpůrná vrstva
      • můžou být nezávislé na frameforku

Úpravy / Forkování cizích rozšíření


  • Někdy jediná cesta, jak existující rošíření s něcím propojit
  • Musíme se prokousávat cizím kódem
  • Přicházíme o aktualizace nebo musíme slučovat kód
  • Zato možnosti implementace jsou neomezené

Rošíření pro jiná rošíření


  • Lepší než forkovat
  • Musí být dostatečně podporováno rozšířením
  • Zůstává nám schopnost aktualizovat rozšíření
  • Opakovaná použitelnost bez úprav
  • Není ideální to přehánět
    (např. pluginy triggerující další a další pluginy)

Knihovny pro tvorbu rozšíření


  • Znovupoužitelnost spodní vrstvy
  • Centralizace základního kódu propojení
  • Integrace více Joomla rozšíření s jedním systémem
  • Standartizace, API
  • Vývoj dalších rozšíření třetími stranami

Příklady





Několik příkladů napojení na další systém...

Google služby


Analytics, Mapy, Kalendář, Picasa atd.


  • Javascript
  • JSON
  • XML
  • Rozšíření všech druhů,
    převážně pluginy a moduly

Použití Javascriptu

$doc = JFactory::getDocument();
$doc->addScript( 'http://maps.googleapis.com/maps/api/js?sensor=false' );

var latlng = new google.maps.LatLng(50.1073, 14.3949);
var mapOptions = {
    zoom: 3,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map($('map_container'), mapOptions);

 <div id="map_container"></div>

Virtuemart 1 - KTK


Propojení Virtuemartu 1 se systémem KTK
(sklad, crm, účetnictví apod)


  • XML RPC
  • Standalone scripty manipulují s DB
  • Probíhá ze strany KTK
  • Scripty poskytují Virtuemart API na míru KTK
  • Vlastní Fork VM 1
      • Custom fieldy
      • Filtry produktů
      • Zboží z podkategorií
      • One page checkout

Použití XML RPC

Klient
$req_string = '<requests><request task="get_user"><id>123</id></request></requests>';				
$ch = curl_init( 'https://example.com/users.php' );

curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $req_string );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

$response = curl_exec($ch);
curl_close($ch);
Server
$req_string = file_get_contents( 'php://input' );
$req_xml = @simplexml_load_string( $req_string );
$requests = $req_xml->xpath( '//request' );

foreach( $requests as $request ){

$response .= SomeClass::process_request($request);
//$response .= '<response><items><item><id>1</id></item></items></response>';
//$response .= '<response><exception>ERROR</exception></response>';
}

header('Content-Type: text/xml;');
echo $response;

Přenos objednávek - XML RPC
Přenos produktů - XML RPC

Virtuemart 1 - SAP


Propojení Virtuemartu 1 se systémem SAP
(sklad, crm, účetnictví apod)










  • SOAP (WSDL) - obousměrné propojení
  • Vlastní komponenta na sync Virtuemartu a SAPu
  • Probíhá ze strany komponenty
  • Fork vlastního forku VM 1 (viz předchozí slide)
      • Přidána volání komponenty do kódu VM
      • Rozšířena views administrace VM  o SAP prvky

    Použití SOAP s WSDL


    try{
    
        $login  = array( 'login' => 'aaa', 'password' => 'bbb' );
        $config = array( 'example.com/wsdl.xml', $login, 'trace' => 1 );	
        $soap   = new SoapClient( $config );	
        //print_r( $soap->__getFunctions() );
        //print_r( $soap->__getTypes() );
    
        $order  = array(
            'id'       => 123, 
            'total'    => 456, 
            'products' => array(1, 2, 3, 4)
        );
        
        $return = $soap->createOrder( $order );
        //print_r( $return );
    	
    }catch( SoapFault $exception ){ }
    

    Přenos objednávek - SOAP
    Použití FTP a Cronu

    Joomla - Redmine


    Propojování Joomly s project management systémem Redmine

    (projekty, úkoly, novinky, kontakty a další)


    • XML REST
    • Joomla knihovna
    • Joomla moduly
    • Joomla pluginy
    • Scripty pro formuláře
      (Breezing forms, RS forms apod.)



    joomla-api.easyredmine.com

      Použití knihovny

      
      jimport('easyredmine_api.rest.news');
      
      $api      = new EasyRedmineRestApiNews( 'https://joomla-connector.easyredmine.com', '***' );
      $filters  = array( 'project_id' => 123 );
      $list     = $api->getList( $filters );
      
      if( $list ){
          foreach( $list as $item ){
              echo (string) $item->title.'<br />';
          }
      }
      
      
      jimport('easyredmine_api.rest.issues');
      
      $api    = new EasyRedmineRestApiIssues( 'https://joomla-connector.easyredmine.com', '***' );
      $item   = (object) array( 'project_id' => 123, 'subject' => 'new issue' );
      
      if( $api->store( $item ) ){
          echo 'Issue stored ok, id = '.(int) $item->id;
      }else{
          echo 'Store errors:<pre>';
          print_r( $api->getErrors() );
          echo '</pre>';
      }
      

      XML REST komunikace


      Virtuemart 2 - Redmine


      Přímá integrace mezi VM2 a Redmine

      (úkoly z obj., stavy úkolů podle stavů obj. a další)


      • XML REST
      • Joomla knihovna
      • Plugin pro Virtuemart
        (system plugin)


      Plugin přidává do backendu VM nová views
      pro správu Redmine integrace


      Stručné dotazy?



      Složitější otázky se proberou v rámci

      navazující diskuze o integracích







      ~ konec ~

      Napojení Joomla! webů na další systémy

      By vikijel

      Napojení Joomla! webů na další systémy

      Jak napojit webové stránky v Joomla! na jiné aplikace. Ukázky řešení napojení na Redmine (open source aplikace na řízení projektů i celých firem). Napojení na účetní systémy, interní informační systémy. Ukázky automatizace komunikace s klienty a potenciálními klienty.

      • 1,698