Podaci iz K2 u eksternoj skripti

Autor esedic, 11. Ožujak 2013, 18:53

0 Članovi i 2 Gosti pregledava ovu temu.

esedic

Najprije da se ispričam, ako mi hrvatski nije najbolji, pišem vam iz Slovenije.
Na getk2.org forumu vidio sam post jednog vašeg člana (Dario), koji mi je priporučio, da napišem novu temu na ovome forumu.

Upotrebljavam Joomlu 2.5.9 in K2 2.6.5.

Na sajtu imam i jednu eksternu php skriptu, koju u K2 template-u importiram sa <?php require_once() ?>
Želim da u toj php skripti dobijem vrijednosti extra_fields iz tablice k2_items.
Nešto u ovom fazonu:
SELECT * FROM `#__k2_items` where `ęxtra_fields` LIKE ... AND published = 1;

Hvala na pomoći!

Dario

Citat: esedic  u 11. Ožujak 2013, 18:53
Najprije da se ispričam, ako mi hrvatski nije najbolji, pišem vam iz Slovenije.
Na getk2.org forumu vidio sam post jednog vašeg člana (Dario), koji mi je priporučio, da napišem novu temu na ovome forumu.

Upotrebljavam Joomlu 2.5.9 in K2 2.6.5.

Na sajtu imam i jednu eksternu php skriptu, koju u K2 template-u importiram sa <?php require_once() ?>
Želim da u toj php skripti dobijem vrijednosti extra_fields iz tablice k2_items.
Nešto u ovom fazonu:
SELECT * FROM `#__k2_items` where `ęxtra_fields` LIKE ... AND published = 1;

Hvala na pomoći!

Evo Darija :)

Dakle, za početak bi trebao zaboravit require_once - joomla ima svoju metodu za include vanskih klasa odnosno library-a, a zove/poziva se :

JLoader::register('ImeKlaseClass', '/putanja/do/klase.php');

više informacija možeš naći ovdje

Nadalje... extra filedovi su zapisani u JSON formatu u svakom članku, pa ajmo dohvatit extra fieldove članka s ID-om 2...

QUERY
SELECT extra_fields  FROM `#__k2_items` WHERE id=2

nako što dobiješ rezultate, samo je potreban json_decode
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

esedic

Hvala Dario na brzom odgovoru.  :)

Eksternu PHP skriptu sam napisao ovako (htio sam upotrebit Joomla API):


// No direct access
defined('_JEXEC') or die('Restricted access');
// Define directory separator
define('DS', DIRECTORY_SEPARATOR);
define('JPATH_BASE', realpath(dirname(__FILE__)));
define('JPATH_THEMES', JPATH_BASE.DS.'templates');
// Get Joomla! framework
require_once (JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once (JPATH_BASE.DS.'includes'.DS.'framework.php' );
require_once (JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'factory.php' );

$mainframe = JFactory::getApplication('site');
$mainframe->initialise();

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('extra_fields')
->from('#__k2_items')
->where('id = 230');
$db->setQuery($query);

$myExtraFields= $db->loadRowList();


Ako pomoću komponente JDump napravim dump($myExtraFields) dobijem ovo:

[array] 0
[string] 0 =  "[{"id":"3","value":"Mario Primorac"},{"id":"4","value":"Trg komandanta Staneta 8, 1000 Ljubljana"},{"id":"5","value":"01 519 38 42"},{"id":"6","value":"[email protected]"},{"id":"7","value":["3","5","1","2","4"]},{"id":"8","value":" itd


Nisam siguran da li razmišljam u pravom smjeru?
Da li je sad potrebno razbiti ovaj array pomoću json_decode?
Jer sem se zaglavio na ovoj točki, npr. ako probam ovo:


$myResult = json_decode($myExtraFields);
dump($myResult);


rezultat je NULL.

Dario

#3
Citat: esedic  u 12. Ožujak 2013, 17:36

$db->setQuery($query);

$myExtraFields= $db->loadRowList();

Većinu si dobro napravio, ali koliko vidim, ti ovdje vraćaš rezultate sa loadRowList() funkcijom što znači da neovisno o broju rezultata koji će ti MySQL vratiti - uvijek dobivaš array, što u tvojem slučaju nije potrebno jer uvijek dobivaš samo 1 rezultat iz baze....

Citat: esedic  u 12. Ožujak 2013, 17:36
Ako pomoću komponente JDump napravim dump($myExtraFields) dobijem ovo:
[array] 0
[string] 0 =  "[{"id":"3","value":"Mario Primorac"},{"id":"4","value":"Trg komandanta Staneta 8, 1000 Ljubljana"},{"id":"5","value":"01 519 38 42"},{"id":"6","value":"[email protected]"},{"id":"7","value":["3","5","1","2","4"]},{"id":"8","value":" itd

Dakle kao što vidiš i sam, dobio si array...

Citat: esedic  u 12. Ožujak 2013, 17:36
Da li je sad potrebno razbiti ovaj array pomoću json_decode?
Jer sem se zaglavio na ovoj točki, npr. ako probam ovo:


$myResult = json_decode($myExtraFields);
dump($myResult);


rezultat je NULL.
Naravno da je rezultat NULL jer ti u ovom slučaju pokušavaš iz array-a decodirat u array, što je naravno nemoguće :)

E sad imaš dva moguća ishoda.... Prvi bi bio da tvoj json_decode glasi

$myResult = json_decode($myExtraFields[0]);
dump($myResult);

Obrati pozornost da referenciram na prvo polje arraya $myExtraFields i to bi trebalo sve dalje biti u redu i dobit ćeš array u ovoj svojoj varijabli.

Drugi, ispravan ishod bi bio da ne vraćaš rezultate sa $db->loadRowList() jer uvijek dobivaš samo jedan rezultat (dohvaćaš extra field-ove vezane za samo jedan članak, pa može biti samo jedan rezultat), te bi morao vratit rezultate sa $db->loadRow(), dakle samo jedan rezultat i ćeš u svojem rezultatu dobiti samo string, a ne array - i onda vrijedi ova tvoja varijanta json_decode-a.

Neznam koliko sam razumljiv bio pa evo kako bi ja to napravio :)

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('extra_fields')
->from('#__k2_items')
->where('id = 230');
$db->setQuery($query);
$myExtraFields= $db->loadRow(); // obrati pozornost da vraćam samo row, dakle rezultat je string, a ne array

$myExtraFields = json_decode($myExtraFields); // i sada json_decode normalno odradi svoj posao, budući da si mu dao json_encode-irani array, odnosno string
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

Dario

#4
@esedic jesi probao, sve štima, može lock na topic ?

P.S. nisam siguran dal postoji loadRow() funkcija pa ako ti javi grešku loadResult() bi trebao radit.... malo mi se Joomle već pobrkale pa neznam u kojoj što radi  ;)
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

esedic

Zdravo!

Probao sam na brzinu, meni u stvari treba kompleksniji query, preko vikenda ču dobro razmislit i probati nešto napravit.
Što se tiče $db->loadRow() metode ona vraća NULL, ali zato $db->loadResult() vrati ok. Isto važi i za $db->loadObject().
Ako buda tema još odključana, javim rezultate.

Hvala na pomoći!