it-swarm.dev

Come modificare la struttura dell'articolo?

A volte, dobbiamo personalizzare la struttura di Joomla! articoli con campi personalizzati al fine di proporre agli utenti aree di testo/input diversi in cui inserire dati come data, posizione, testo 1, testo 2, ecc.

Quindi, è più facile occuparsi del design nel front-end. Con le regole CSS, ogni contenuto è progettato correttamente.

So di poterlo fare con un componente CCK come K2, Seblod, ecc.

C'è un altro modo senza componente, con php e l'aggiunta di alcune modifiche a Joomla?

4

Credo di avere la tua soluzione, ma NON hackerare il core. Abbiamo sentito costretto a farlo nel corso degli anni, e stiamo ancora pagando il prezzo anche oggi, perdendo aggiornamenti, rivisitando gli hack ogni volta che aggiorniamo, e incompatibilità generale con altri componenti.

Quello che facciamo ora è questo:

  1. Nuova tabella #__content_ext con un campo chiave identico a #__content e una colonna per ogni campo personalizzato che desideri.
  2. Nuova tabella #__categories_ext con un campo chiave identico a #__categories e una colonna per ogni campo personalizzato che potresti desiderare.
  3. Aggiungi campi personalizzati a com_content (usiamo e amiamo Aixeena CCK che può aggiungere campi personalizzati a contenuti, categorie, e menu) .

A questo punto, stai sfruttando tutto il codice/la logica in com_content senza un singolo hack core. Tuttavia, tutti i campi personalizzati vengono archiviati nelle colonne params e attribs delle tabelle Joomla, che non è l'ideale per l'uso tipico del database in altri codici personalizzati di cui potresti aver bisogno. È qui che entra in gioco la "magia":

Scrivi un semplice plug-in di contenuto utilizzando il seguente codice di esempio per creare/aggiornare le estensioni della tabella sopra descritte. Ciò inserisce tutti i campi personalizzati in tabelle personalizzate che sono disponibili per qualsiasi scopo siano necessari in SQL.

public function onContentAfterSave($context=null, $article=null, $isNew=0) {
    if($context == 'com_categories.category') {
        $params = new JRegistry;
        $params->loadString($article->params);
        $myObj = $params->toObject();
        // Use properties from $article and $myObj to create/update #__categories_ext
        // Use $article->id as the primary key if #__categories_ext
        // Your SQL goes here....

    }elseif($context=='com_content.article'){
        $attribs = new JRegistry;
        $attribs->loadString($article->attribs);
        $myObj = $attribs->toObject();
        // Use properties from $article and $myObj to create/update #__content_ext
        // Use $article->id as the primary key if #__content_ext
        // Your SQL goes here....

    }
}

Certo, i dati vengono archiviati due volte - una volta come contenuto personalizzato e di nuovo nella tabella personalizzata, ma piegare quella regola di normalizzazione PIÙ di quanto paga per il lavoro e il dolore che un hack core costa se intendi mantenere il sito aggiornato alle versioni di Joomla . Hai anche lasciato cose in tale stato da poter usare tutti i com_content e altre estensioni che usano com_content senza alcuna conseguenza dei tuoi hack.

10
GDP

Ho dovuto farlo anche di recente e ho seguito alcuni esempi online.

Ci sono alcuni buoni esempi tra cui i documenti Joomla qui

Un altro tutorial di Nizza può essere trovato qui - Aggiungi campi di contenuto personalizzati a Joomla

Mi rendo conto che non vuoi usare un CCK, tuttavia dovresti dare un'occhiata a Fields Attach che è molto buono e semplice

Spero che questi aiuti.

3
jonboy

Oltre all'estensione del core, ci sono alcune estensioni che consentono di estendere il contenuto di joomla con campi personalizzati.

Altrimenti, i suggerimenti e i tutorial forniti nelle altre risposte "ti faranno andare avanti".

2
FFrewin