Autore Topic: Joomla & PHP  (Letto 1141 volte)

Offline lucachat

  • Nuovo arrivato
  • *
  • Post: 6
    • Mostra profilo
Joomla & PHP
« il: 24 Ago 2016, 10:24:50 »
Salve a tutti,
devo sviluppare un applicativo PHP esterno a Joomla, che però deve integrarsi con la creazione, modifica ed eliminazione di articoli.
Ora, per la creazione di articoli, mi sto basando su questa guida: https://docs.joomla.org/Creating_content_using_JTableContent e funziona!
Invece per l'eliminazione e la modifica non sono riuscito a trovare guide "attendibili".
In ogni caso, potrei riuscire a gestirle tramite MySqli, ma ho paura di non costruire bene la query (non conoscendo come funziona il DB di Joomla).
Potreste aiutarmi? Avete qualche fonte attendibile da cui potrei vedere il codice?
Grazie in anticipo

Offline giusebos

  • Fuori controllo
  • *
  • Post: 18030
  • Sesso: Maschio
  • Giuseppe Serbelloni Mazzanti Viendalmare
    • Mostra profilo
    • Demo iCagenda
Re:Joomla & PHP
« Risposta #1 il: 24 Ago 2016, 12:29:49 »
era meglio inserire questa richiesta in sviluppo dovè è più probabile un aiuto.
Chiedi di spostare il post ad un moderatore cliccando su segnala al moderatore
su www.icagenda.it guide e tutorial con esempi di chronoforms e chronoconnectivity

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Joomla & PHP
« Risposta #2 il: 24 Ago 2016, 16:14:30 »
se fai qualcosa di "esterno" non ti serve sapere nulla di joomla, dovrai solo usare la tabella/e del database dedicata ai contenuti.
Ovviamente non puoi usare le acl
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline lucachat

  • Nuovo arrivato
  • *
  • Post: 6
    • Mostra profilo
Re:Joomla & PHP
« Risposta #3 il: 26 Ago 2016, 19:44:45 »
Perfetto. Al momento ho lavorato soltanto sulla parte di inserimento ed eliminazione utilizzando la classe JTable (https://docs.joomla.org/J1.5:Using_the_JTable_class).
Dopo alcuni tentativi di creazione ed eliminazione di articoli (tutti con esito positivo), ho ottenuto il seguente errore:

Error displaying the error page: Table 's' was not locked with LOCK TABLES SQL=SELECT template, s.params FROM #__template_styles as s LEFT JOIN #__extensions as e ON e.type='template' AND e.element=s.template AND e.client_id=s.client_id WHERE s.client_id = 1 AND home = '1' ORDER BY home: Unknown column 'alias' in 'field list' SQL=UPDATE `#__assets` SET `name`='com_content.article.6',`title`='test article',`rules`='{\"core.admin\":{\"7\":1},\"core.manage\":{\"6\":1},\"core.create\":{\"3\":1},\"core.delete\":[],\"core.edit\":{\"4\":1},\"core.edit.state\":{\"5\":1},\"core.edit.own\":[]}',`parent_id`='27',`level`='3',`lft`='23',`rgt`='24',`alias`=NULL WHERE `id`='68'

Come posso risolverlo?
Posso dire che questo errore è comparso dopo che ho eseguito il codice inerente all'eliminazione...ma, ripeto, non conoscendo la logica del DB di Joomla, non saprei...
Grazie in anticipo per le eventuali risposte.

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Joomla & PHP
« Risposta #4 il: 26 Ago 2016, 20:46:50 »
..ma stai sviluppando un componente? altrimenti JTable dove ce l'hai?
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline lucachat

  • Nuovo arrivato
  • *
  • Post: 6
    • Mostra profilo
Re:Joomla & PHP
« Risposta #5 il: 26 Ago 2016, 21:30:19 »
In teoria no! JTable con le relative classi di configurazione, l'ho ottenuta copiando il contenuto del file "index.php" della cartella administrator!
Dal momento che non avrei saputo come muovermi facendo semplici query (sempre perché non conosco il DB), ho ritenuto saggio utilizzare la
classe JTable appoggiandomi dunque alla documentazione ufficiale di Joomla, e sicuramente utilizzandola in maniera incosciente avrà scatenato l'errore citato nel precedente post.
Ora:
1: qualora volessi proseguire con questa strada, come posso "mettere a posto" questo errore?
L'errore è uscito fuori quando ho provato ad eseguire il codice per l'eliminazione, dopodiché è rimasto anche in fase di inserimento...
2: se invece volessi utilizzare l'SQL, come potrei strutturare le query in maniera che non si "impalli" il DB restituendo errori come il precedente? Per l'inserimento bisogna obbligatoriamente compilare tutti i campi? Per l'eliminazione basta eliminare il record soltanto dalla tabella "content" o anche da altre tabelle?

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Joomla & PHP
« Risposta #6 il: 27 Ago 2016, 14:12:18 »
cioè invece di sviluppare un estensione in cui avresti potuto sfruttare tutto il framework con i relativi metodi e classi hai deciso di istanziare un nuovo framework solo per riuscire a fare una query? ... boh non capisco... probabilmente gli errori derivano da qualcosa che usi e che non hai caricato...
Ma non capisco nemmeno quando dici "conoscere il database", probabilmente intendi qualcosa che mi sfugge perchè più che conoscere i campi dove mettere "le cose" che basta leggerli credo bisogna conoscere mysql.
Inoltre gli articoli sono categorizzati, molte chiavi sono nested, bisogna gestire le acl etc etc... come fai? dovresti rifare joomla.
Inoltre ancora ricorda che amministrazione e frontend in joomla sono separati.
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline lucachat

  • Nuovo arrivato
  • *
  • Post: 6
    • Mostra profilo
Re:Joomla & PHP
« Risposta #7 il: 27 Ago 2016, 15:50:11 »
Ok.
Optiamo per la soluzione 2 (dal momento che non sto creando un componente nè conosco il framework e inoltre devo garanire che questo applicativo funzioni - cambiando il codice certamente - anche con altri CMS).
Senza utilizzare il framework di joomla (solo mysql) ritornando dunque alla tua prima risposta...
Se elimino un record dalla tabella content o lo inserisco uno sempre nella stessa senza toccare altre tabelle, sono a posto oppure devo inserirlo/eliminarlo in/da altre?
Il mio "non conosco il DB" si riferisce alle eventuali relazioni tra tabelle, alla sua struttura, che, non avendo mai sviluppato e lavorato su un DB joomla, non conosco.
Ci sono guide/documentazioni che spiegano quali tabelle coinvolgere?
Grazie

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Joomla & PHP
« Risposta #8 il: 27 Ago 2016, 16:23:57 »
è questo il problema... se usi un framework devi sviluppare su questo un estensione.
Certamente ci sono chiavi esterne da considerare... quella delle categorie, dell'utente che inserisce/modifica o cancella un contenuto e ultima non ultima quella dei permessi di inserimento/modifica/eliminazione.

In pratica se vuoi gestire tutti questi aspetti devi necessariamente sviluppare un estensione, che estende ciò che già esiste, perchè in alternativa devi costruirti lo stesso sistema per i fatti tuoi... ma non ha un senso.
qui trovi tutto
https://developer.joomla.org/
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline lucachat

  • Nuovo arrivato
  • *
  • Post: 6
    • Mostra profilo
Re:Joomla & PHP
« Risposta #9 il: 30 Ago 2016, 02:57:01 »
Ho creato il file "test.php" e l'ho inserito nella directory "myComponent" (che si trova nella stessa directory di Joomla).
Ecco il contenuto:
Codice: [Seleziona]
$p = dirname(dirname(__FILE__));
define('JOOMLA_MINIMUM_PHP', '5.3.10');

if (version_compare(PHP_VERSION, JOOMLA_MINIMUM_PHP, '<'))
{
    die('Your host needs to use PHP ' . JOOMLA_MINIMUM_PHP . ' or higher to run this version of Joomla!');
}

$startTime = microtime(1);
$startMem  = memory_get_usage();

define('_JEXEC', 1);

if (file_exists($p . '/defines.php'))
{
    include_once $p . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', $p);
    require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_BASE . '/includes/framework.php';

$article = JTable::getInstance('content');
$date = JFactory::getDate()->toSQL();
   
$article->title            = $arrArticle['Titolo'];
$article->alias            = JFilterOutput::stringURLSafe($arrArticle['Titolo']);
$article->introtext        = '<p>' . $arrArticle['HTML_Text'] . '</p>';
$article->catid            = intval($arrArticle['Categoria']);
$article->created          = $date;
$article->created_by_alias = $arrArticle['Author];
$article->state            = intval($arrArticle['Status']);
$article->access           = intval($arrArticle['Accesso']);
$article->featured         = intval($arrArticle['InEvidenza']);
$article->metadata         = '{"page_title":"","author":"","robots":""}';
$article->language         = '*';

if (!$article->check()) {
     JError::raiseError(500, $article->getError());
     return FALSE;
}

if (!$article->store(TRUE)) {
     JError::raiseError(500, $article->getError());
     return FALSE;
}

Può andare per creare un articolo?
Ho provato ad eseguirlo e tutto funziona.
Sicuramente avrò dimenticato/sbagliato qualcosa...

P.S. I dati che vengono passati da "$arrArticle" sono validi.

 

Torna su