Smartsef werkt niet goed samen met een aantal varianten van de module. Smartsef past url's aan onder andere de spaties. Hierdoor werken de queries niet meer.

Smartsef voor joomla 1.5 is al een tijdje niet onderhouden, de smartsef site werkt niet en de extension komt niet meer voor op extensions.joomla.org. Er zijn aanpassingen geweest in joomla sinds de laatste versie van smartsef. Dit zijn al een aantal redenen om smartsef niet meer te gebruiken. In ieder geval een reden om op dit moment geen tijd een smartsef te willen steken.

Er zijn aan aantal situaties waarin smartsef wellicht toegevoegde waarde heeft, voor joomla 1.0 had het dat zeker. Joomla is een stuk beter geworden in het maken van 'Search Engine Friendly' Url's en zoekmachines zijn heel veel beter geworden in het verwerken van de zoekmachine onvriendelijke URL's. Er is zeker nog wat voor de tegen om de Url's een wat fraaier uiterlijk te geven maar de term HRF ( Human Reader Friendly) zou veel beter zijn. 

 

Een zeer ernstig probleem met smartsef is dat na het purgen van de database je complete site onvindbaar is !

Een aantal zaken die smartsef regelt ( bijvoorbeeld de beroerde error meldingen in joomla-core ) zijn ook via de template en .htaccess te regele.

Com_datafeeds doet aardig zijn best om de url vriendelijk te maken, daar is eigenlijk geen rewritting meer voor nodig. Een probleem met com_datafeeds is is dat er heel veel links zijn, en dus de url-repository van smartsef nogal groot wordt. Overhead die ik je kan afraden.


 

In principe heeft de parser dezelfde systeemeisen als joomla 1.5 :

  • Joomla 1.5.12 of nieuwer (de component wordt steeds getest met de laatste versie van joomla)
  • PHP 4.2.x of nieuwer
  • MySQL 3.23.x of nieuwer
  • Apache 1.3.x of nieuwer
  • allow_url_fopen aan of curl + uitgaande http

Test Script

Eenvoudig test script op basis vereisten te testen: req-test.php, uitpakken, en het php bestaand ergens op je server neerzetten  en opvragen

 

Beperkingen mysql php versies

I.v.m. de verschillende character coderingen en het werken met bijzondere tekens zijn er wat haken en hogen. Het mooiste is als de database collatie ondersteund  (mySQL >= 4.1.2). Lager kan maar dan is het echter wel nodig dat de php versie UTF-8 goed ondersteund. ( dat is vanaf php 5).

Daarnaast ondersteunen oudere versies van mySQL de 'on update' syntax niet, er is dan een aangepaste (inefficientere versie van het import script nodig)

Er zijn wat aanpassingen nodig om de component goed te laten werken in geval van een oude database versie.

Als je een grote website gaat maken en of alle vrijheid wilt inclusief CLI en in eigen beheer van de cron is het gebruik van een VPS zeer aan te raden

 

 

Curl issues

  • Curl heeft een cache directory nodig. administrator/cache moet schrijfbaar zijn voor de webserver.
  • Als de uiteindelijke feed opgehaald wordt via een redirect (301/302) kan curl deze redirect alleen volgen als er geen beperkingen zijn op safe_mode en open_basedir. Dit treedt bijvoorbeeld op bij de automatische configuratie van daisycon

libxml php bug

Versies libxml 2.7.1 en 2.7.2 leveren problemen op in combinatie met de xml parser van php.

Zie PHP en LibXML bug.

 

 

De parser gebruikt joomla als framework voor de backend ( onderhoud van de feeds) en de frontend ( weergave van de feeds). De parser zelf is volledig onafhankelijk van joomla (de cron werkt buiten joomla om) en een frontend is te schrijven in elke programmeertaal die je mysql database kan benaderen. Het onderhoud van de feeds is wat lastiger. Het frame van joomla maakt het relatief eenvoudig om een admin omgeving aan te bieden, het zou vrij veel werk zijn een losse admin te schrijven.

 

phpmyadmin

installatie

  • indien gewenst creëer een nieuwe database
  • download de component
  • in de map admin staan twee sql bestanden vervang hierin #__ door een gewenste prefix (of haal het weg) en importeer de feeds in joomla. (#__ staat er meerdere keren in)
  • in de map cron staat het bestand feedcron.php. Hierin staat en require van configuration.php, de instantiatie van de config en de confguratie van de database parameters. Verwijder de eerste twee en pas de rest aan.
  • installeer de map cron met inhoud op de server. Aanroepen van de feedcron.php (http://www.jouwserver.nl/jouw-pad/cron/feedcronphp ) zou moeten resulteren in het importeren van de voorbeeld feeds.
  • Download de standalone demo.
  • Vervang in het bestand db.php de configuratie van de database ( tip : include dit bestand ook in de feedcron.php ipv de zaak daar dubbel te configureren.)
  • installeer de demo in kijk of het werkt.

feeds toevoegen

  • Ga naar de tabel datafeeds in phpadmin
  • Voeg een nieuwe regel toe (invoegen/insert)
  • Begin met de volgende veld
    • feed : korte naam voor de feed
    • feed_url : de url van het xml/cvs bestand
    • groep : de groep of type waartoe de feed behoort bijvoorbeeld vakantie of winkels
    • class: een van TradetrackerRSS, M4NRSS, ZanoxRSS, AffiliateRSS, TradeDoublerRSS, CleafsRSS, AffiliateCSV (";"), CSV, AtrRSS (xml met data in attributen
  • Sla de feed op een probeer een import:
    http://www.jouwserver.nl/jouw-pad/cron/feedcronphp?freq=1&feed=
  • Als het goed is staat er nu een array met de velden. Die kun je in phpmyadmin gaan invullen:
    • title : naam of titel van het product
    • href : product url
    • image : image url
    • prijs : de prijs van het product
    • menu_1-9 negen mogelijk menu velden

Toch met joomla

ook als je ervoor kiest om de frontend van joomla niet te gebruiken kun je evengoed de backend gebruiken om de feeds te onderhouden. Het lijkt overkill maar als je twee keer een feed via phpmyadmin onderhouden hebt ben je dankbaar.

  • installeer joomla, volg de stappen het is niet nodig voorbeeld data te installeren.
  • download de component
  • Log in in de admin, ga naar extensions en install en installeer de component.
  • onder components vind je nu de datafeeds, klik de cron link.Nu zouden de feeds ververst moeten worden
  • Download de standalone demo.
  • installeer de inhoud in de joomla root directory.
  • Viola
  • Als je wilt kun je delen van joomla  verwijderen bijvoorbeeld ongebruikte templates

 

Kwestie van uitproberen. de parsers van tradetracker en affiliates zijn een goed punt om eens te proberen.

 

Voor te afwijkende feeds zoals bijvoorbeeld suncamp kan een custom parser toegevoegd worden. Er zijn wel basisvoorwaarden aan de structuur van de feed: de feed moet per item gerubriceerd zijn en niet op menu items.

 


 

 

 

Check ook  Release notes.

Herinstalleren

De component ondersteunt de upgrade methode van joomla. Je kunt de component dus herinstalleren zonder eerst een deinstall uit te voeren.

Voor de zekerheid

  • Maak een backup van JOOMLA_HOME/modules/mod_datamenu en dan met name eigen templates die je in de tmpl hebt geplaatst
  • Maak een backup van JOOMLA_HOME/components/com_datafeeds en dan met name eigen templates die je in view/... hebt geplaatst
  • Maak een backup van JOOMLA_HOME/administrator/components/com_datafeeds/cron als je die aangepast hebt en eventuele andere bestanden die je handmatig hebt toegevoegd in de cron directory.
  • Maak een dump of kopie van de tabel jos_datafeeds

 

Het verwerken van de feeds is een vrij zware operatie. Door de feedcron veelvuldig aan te roepen zou een kwaadwillende een DOS aanval kunnen uitvoeren.

Over het algemeen voer je de feedcron uit vanuit een vast locatie. Je kunt de map ../administrator/components/com_datafeeds/cron  dan eenvoudig beveiligen met een .htaccess bestand ( apache )

Order deny,allow
deny from all
allow from <toegestaan ip nummer>
allow from <ander toegestaan ip nummer>

 Uiteraard zou je hier ook met wachtwoorden aan te gang kunnen. 

En andere methode is om de map 'cron' en/of het script feedcron.php andere namen te geven. Alleen werkt dan de link vanuit het administrator panel niet meer.

Het is mogelijk om 1 (en ook meerdere teksten) te koppelen aan een specifieke (sub)rubriek in het menu.

Maak hiervoor een nieuwe module 'mod_datamenu' aan en kies bij de parameters 'artikel'

Schrijf daarna een artikel, titel en alles kun je zelf kiezen, het artikel kan de status ongepubliceerd houden, van belang is de alias. De alias van het artikel moet worden alias-rubriek-subrubriek

De content wordt in de module geplaatst. Description en keywords worden in de metadata gezet.

Zie als voorbeeld gsm-toestellen/Google.html Onderaan staat een korte intro van de telefoon. In de broncode zie je de description (hetzelfde als de tekst) en de keywords die gekozen zijn.

 

Links

Hetzelfde mechanisme, alleen gebruik je hier de joomla weblinks. Verschil met de artikelen is hier dat de links ook op een lager niveau getoond worden. Dus links met alias vakantie-spanje, komen ook op de pagina vakantie-spanje-costabrava te staan.

Uiteraard kun je ook een artikel maken met links.

 

Voorbeeld

plaatsen module

Maak een nieuwe module aan met mod_datamenu en kies voor 'Links'

 

 

 

Configuratie weblinks

Je kunt (moet) meerdere links dezelfde alias geven.

Resultaat

(niet meer op de live site)

 

 

of in geval van een artikel :

 

 

Meerdere modules

Als er op meerdere locaties stukken tekst moeten komen kun je meerdere modules aanmaken. Kies bij het aanmaken van de module dan een extra prefix voor de alias.

de alias van het artikel wordt dan

prefix-alias-rubriek-subrubriek.

De feed bevat links naar niet bestaande afbeeldingen.

 

Tja, hier moet de eigenaar van de feed/website zijn huiswerk beter doen. De afbeelding wordt met een klein stukje inline javascript vervangen door een lege afbeelding.

 


 

Een eigen afbeelding.

De feed bevat geen afbeelding of je wilt altijd een eigen afbeelding weergeven. Dat kan met een callback function:

function noimage_cb (&$item) {
generic_cb($item);
$item['image']='http://www.example.com/noimage.jpg';
}
 

en bij de callback functie in de feed configuratie vervang je generic_cb dan door noimage_cb

 

 

 

Het import script verwijdert automatisch spaties aan het begin en einde van een menu item. Er zijn een paar feeds waar in plaats van gewone  spaties gecodeerde non-breaking-space characters staan. En manier om deze weg te krijgen:

 

function nbsp2space(&$var) {
$nbsp=urldecode("%A0");
$var=str_replace($nbsp,' ',$var);

}
function elmar_cb(&$item){
    global $feed_opts;
   nbsp2space($item[$feed_opts['menu_1']]);
   nbsp2space($item[$feed_opts['menu_2']]);
   nbsp2space($item[$feed_opts['menu_3']]);

    generic_cb($item,$count);
}
 

Verschillende feeds gebruiken verschillende schrijfwijzen voor items 'Belgie' versus 'België' en 'LCD TV' versus 'LCD Televisie'. Het eerste probleem ( e versus ë) wordt in principe door de zogeheten collation van de database opgelost, maar het is toch netter het gelijk te trekken anders is er kans dat Belgie in plaats van België in de menu's komt. Andere problemen kunnen worden opgelost via een callback functie.  Een voorbeeld voor het aanpassen van landen: