Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Joomla-Tags werden nicht gespeichert  (Gelesen 1860 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

gelöschter Nutzer (03/14)

  • Gast
Joomla-Tags werden nicht gespeichert
« am: 31. Dezember 2013, 15:59:28 »
Hallo zusammen,

ich möchte gerne in meiner Lern- und Hobbykomponente Tags einbinden.

Zunächst möchte ich klar stellen, wie die Komponente (Name: Bestia) aufgebaut ist:

1. Die Komponente nutzt die Joomla-Kategoriesierungsmöglichkeit
2. Es existieren Einträge (Items), die jeweils einer Kategorie zugeordnet werden können
3. Diese Items haben bestimmte zugewiesene Werte und Parameter



Nun soll jedes Item auch mit Tags versehen werden können.


Was bisher getan wurde:

  • In der Tabelle #__content_types wurde ein Eintrag mit der ID 99 eingefügt
  • Die Table (ADMIN/tables/bestia.php) erhielt im Constructor den Aufruf JObserverMapper::attachAllObservers($this);
  • Die Formdatei (ADMIN/models/forms/bestia.xml) wurde mit einem Feld für die Tags ausgestattet


Im Detail bedeutet dies:

#__content_types wurde um eine Zeile mit folgenden Werten ergänzt:

- type_id: 99
- type_title: Bestia Items
- type_alias: com_bestia.item
- table: {"special":{"dbtable":"#__bestia_items","key":"id","type":"Item","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}
- field_mappings: {"common":[{"core_content_item_id":"id","core_title":"title","core_state":"null","core_alias":"null","core_created_time":"null","core_modified_time":"null","core_body":"description", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","core_access":"null", "core_params":"params", "core_featured":"featured", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"catid", "core_xreference":"null", "asset_id":"null"}]


Aufruf im Constructor (ADMIN/tables/bestia.php):

    function __construct(&$db)
    {
        parent::__construct('#__bestia_items', 'id', $db);
        $this->_observers = new JObserverUpdater($this);
JObserverMapper::attachAllObservers($this);
    }


Formdatei (ADMIN/models/forms/bestia.xml):

        <field
                name="tags"
type="tag"
label="JTAG"
description="JTAG_DESC"
class="inputbox span12"
multiple="true"/>


Soweit, so gut. Leider wird beim Betätigen des Speichern-Buttons (ADMIN/views/item/view.html.php)

if ($canDo->get('core.edit'))
            {
                JToolBarHelper::apply('item.apply', 'JTOOLBAR_APPLY');
                JToolBarHelper::save('item.save');
 
                if ($canDo->get('core.create'))
                {
                    JToolBarHelper::custom('item.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false);
                }
            }

der im Tags-Feld eingegebene Wert nicht gespeichert.  Nach einem Klick auf "Speichern" angezeigt, dass der Speichervorgang erfolgreich gewesen sei. Das Tags-Feld bleibt allerdings leer.

Auch die Datenbanktabellen #__ucm_content sowie #__tags bleiben ummodifiziert.


Was kann hier der Fehler sein?

Beste Grüße :)

gelöschter Nutzer (03/14)

  • Gast
Antw: Joomla-Tags werden nicht gespeichert
« Antwort #1 am: 02. Januar 2014, 13:05:21 »
Hallo zusammen,

da ich an dieser Stelle auch keine "vorgekaute" Lösung haben möchte, würde es mir auch reichen, wenn ihr mir eine möglichst kostenfreie Komponente nennt, die das Joomla-interne Tagging-System nutzt und nicht zum Core gehört.

Besten Dank :)

gelöschter Nutzer (03/14)

  • Gast
Antw: Joomla-Tags werden nicht gespeichert
« Antwort #2 am: 05. Januar 2014, 13:41:14 »
Hallo zusammen,

es gibt Neuigkeiten :)

Leider bin ich noch nicht so weit, dass ich Tags selbst anlegen und speichern kann - bisher werden die Tags weiterhin nicht gespeichert - aber vlt. bin ich auf dem richtigen Weg:

Ich habe festgestellt, dass auch die Werte aus den Checkboxes meiner Komponente nicht gespeichert wurden. Hier habe ich dann in meiner Table-Datei die Store-Funktion eingebaut, siehe:

public function store($updateNulls = true)
{


        JArrayHelper::toString($this->features);
    $this->features = implode(',', $this->features);

return parent::store($updateNulls);
}

Ich vermute, dass ein ähnlicher Ansatz für das Speichern von Tags für meine Table nötig wäre. Doch komme ich noch nicht ganz dahinter, welcher Ansatz dies wohl wäre...

Besten Dank für jede Hilfe :)

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Joomla-Tags werden nicht gespeichert
« Antwort #3 am: 05. Januar 2014, 14:33:22 »
Joomla! ist auch nur ein Mensch...

gelöschter Nutzer (03/14)

  • Gast
Antw: Joomla-Tags werden nicht gespeichert
« Antwort #4 am: 07. Januar 2014, 13:17:11 »
Hallo,

an dieser Stelle möchte ich mich noch einmal dafür entschuldigen, dass hier ein Doppelpost ohne Kennzeichnung vorlag. Ich hatte angenommen, dass ich meinen Beitrag im Joomlaportal hier verlinkt hätte.


Nunja, ich möchte der Community die Lösung des Problems nicht vorenthalten:

In meinem Fall lag der Fehler beim Mapping. Ich habe dieses noch einmal überarbeitet und folgende Version erstellt:

Zitat
{"common":{"core_content_item_id":"id","core_title":"title","core_state":"null","core_alias":"null","core_created_time":"null","core_modified_time":"null","core_body":"description", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","core_access":"null", "core_params":"params", "core_featured":"featured", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"catid", "core_xreference":"null", "asset_id":"null"}, "special":{"parent_id":"null","lft":"null","rgt":"null","level":"null","path":"null","extension":"null","note":"null"}}


Zudem habe ich in meiner Table

JTableObserverTags::createObserver($this, array('typeAlias' => 'com_bestia.item'));
verwendet und im Model die Funktion getItem() eingefügt:

public function getItem($pk = null)
   {
      $item = parent::getItem($pk);

      if ($item->id)
      {

         $registry = new JRegistry;
         $item->tags = new JHelperTags;
         $item->tags->getTagIds($item->id, 'com_bestia.item');
      }
     
     
      return $item;
   }

Eigentlich soll lt. Joomla-Developer-Dokumentation folgende Ergänzung in der Table vorgenommen werden:

$this->_observers = new JObserverUpdater($this); JObserverMapper::attachAllObservers($this);
Dies funktioniert bei mir jedoch nicht, daher bleibe ich bei der o.g. Variante.

Beste Grüße :)