web-dev-qa-db-fra.com

Joomla 3.4.x: les balises ne sont pas enregistrées

J'aimerais utiliser la fonction de marquage de Joomla! dans mon composant.

Pour que cela fonctionne, j'ai créé un postflight qui est exécuté après l'installation:

function postflight($type, $parent)
{
    $table = JTable::getInstance('Contenttype', 'JTable');
    if(!$table->load(array('type_alias' => 'com_bestia.item')))
    {
        $common = new stdClass;
        $common->core_content_item_id = 'id';
        $common->core_title = 'title';
        $common->core_state = 'state';
        $common->core_alias = 'alias';
        $common->core_created_time = 'created';
        $common->core_modified_time = 'modified';
        $common->core_body = 'description';
        $common->core_hits = 'hits';
        $common->core_publish_up = 'publish_up';
        $common->core_publish_down = 'publish_down';
        $common->core_access = 'access';
        $common->core_params = 'params';
        $common->core_featured = 'featured';
        $common->core_metadata   = 'metadata';
        $common->core_language   = 'language';
        $common->core_images = 'images';
        $common->core_urls = 'urls';
        $common->core_version = 'version';
        $common->core_ordering   = 'ordering';
        $common->core_metakey = 'metakey';
        $common->core_metadesc = 'metadesc';
        $common->core_catid = 'catid';
        $common->core_xreference = 'xreference';
        $common->asset_id = null;
        $field_mappings = new stdClass;
        $field_mappings->common[] = $common;
        $field_mappings->special = array();
        $special = new stdClass; $special->dbtable = '#__bestia_items'; $special->key = 'id'; $special->type = 'Item'; $special->prefix = 'BestiaTable'; $special->config = 'array()';
        $table_object = new stdClass;
        $table_object->special = $special;
        $contenttype['type_title'] = 'Item';
        $contenttype['type_alias'] = 'com_bestia.item';
        $contenttype['table'] = json_encode($table_object);
        $contenttype['rules'] = '';
        $contenttype['router'] = 'BestiaHelperRoute::getBestiaRoute';
        $contenttype['field_mappings'] = json_encode($field_mappings);
        $table->save($contenttype);
    }
}

Aussi j'ai modifié mon tableau:

public function __construct(&$db)
{
    parent::__construct('#__bestia_items', 'id', $db);
    JTableObserverTags::createObserver($this, array('typeAlias' => 'com_bestia.item'));
}

Et mon modèle:

/**
 * getItem function.
 * 
 * @access public
 * @param mixed $pk (default: null)
 * @return void
 */
public function getItem($pk = null)
{
    if ($item = parent::getItem($pk)) 
    {
        // Convert the metadata field to an array.
        $registry                   =       new JRegistry;

        if(isset($item->metadata))
        {
            $registry->loadString($item->metadata);
            $item->metadata         =       $registry->toArray();
        }

        if (!empty($item->id))
        {
            $item->tags             =       new JHelperTags;
            $item->tags->getTagIds($item->id, 'com_bestia.item');
            $item->metadata['tags'] =       $item->tags;
        }           
    }

    return $item;
}

Maintenant, j'ai modifié mon formulaire.xml:

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

Maintenant, si je veux enregistrer mon article avec quelques tags, j'obtiens cette erreur:

Speichern fehlgeschlagen! Fehler: SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue 'newTags' dans 'liste de champs'

Que puis-je faire ici?

2
MyFault

Vous avez l'erreur:

Le filtre ne fonctionne pas ici. Enlever

filter      =       "safehtml"

résout le problème.

2
MyFault