web-dev-qa-db-fra.com

Utiliser les tags: JTable :: store () renvoie false

J'utilise des balises dans mes composants. Hm, bien - je voudrais les utiliser ;-)

Ceci est ma déclaration de formulaire pour les balises:

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

Ceci est mon getItem dans 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.goal');
            $item->metadata['tags'] =       $item->tags;
        }
    }

    return $item;
}

Et voici le constructeur de ma table:

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

Dans mon tableau, il y a aussi un remplacement pour la méthode store, parce que je dois préparer un Calendar-Field au format jj.mm.yyyy pour qu'il soit sauvegardé dans MySQL DATETIME:

/**
 * store function.
 * 
 * @access public
 * @param bool $updateNulls (default: false)
 * @return void
 */
public function store($updateNulls = false)
{           
    if(!empty($this->dateofbirth))  // Prepare DOB to be saved in database
    {
        // Set this to a format the sql-table is able to save
        $date                       =           JFactory::getDate($this->dateofbirth);          
        $this->dateofbirth          =           $date->toSql(); 
    }

    // Use parent store method
    $result                         =           parent::store($updateNulls);    

    return $result;
}

Maintenant, mon problème est - si je veux sauvegarder les enregistrements, je reçois cette réponse:

Speichern fehlgeschlagen! Fehler:

Qui est traduit:

Erreur en sauvant! Erreur:

Si je var_dump $ résulte dans ma méthode store, je récupère false. Si je retire

    JTableObserverTags::createObserver($this, array('typeAlias' => 'com_bestia.goal'));

$ résultat est true à nouveau.

Qu'ai-je fait de mal?

2
MyFault

Tout d'abord ceci:

if(!empty($this->dateofbirth))  // Prepare DOB to be saved in database
{
    // Set this to a format the sql-table is able to save
    $date = JFactory::getDate($this->dateofbirth);          
    $this->dateofbirth = $date->toSql(); 
}

Devrait être dans la méthode check(). Puis utilisez ceci après parent::store($updateNulls = false) dans votre méthode store:

var_dump($this->_db->getErrorMsg());die;

pour vérifier la cause de l'erreur. Sinon, vous pouvez utiliser des exceptions pour intercepter l'erreur:

try {
    $result = parent::store($updateNulls);
} catch(Exception $e) {
    die($e->getMessage());
}
1
Artur Stępień

lorsque vous installez votre composant, vous devez insérer une ligne dans la base de données dans install.mysql.utf8.sql ajouter cette ligne

INSERT INTO `#__content_types` (`type_title`, `type_alias`, `table`, `rules`, `field_mappings`, `router`, `content_history_options`) VALUES
('Your Title', 'com_bestia.goal', '{\"special\":{\"dbtable\":\"#__yourtable\",\"key\":\"id\",\"type\":\"Content\",\"prefix\":\"PropertiTable\",\"config\":\"array()\"},\"common\":{\"dbtable\":\"#__ucm_content\",\"key\":\"ucm_id\",\"type\":\"Corecontent\",\"prefix\":\"YourtableTable\",\"config\":\"array()\"}}', '', '{\"common\":{\"core_content_item_id\":\"id\",\"core_title\":\"title\",\"core_state\":\"state\",\"core_alias\":\"alias\",\"core_created_time\":\"created\",\"core_modified_time\":\"modified\",\"core_body\":\"introtext\", \"core_hits\":\"hits\",\"core_publish_up\":\"publish_up\",\"core_publish_down\":\"publish_down\",\"core_access\":\"access\", \"core_params\":\"attribs\", \"core_featured\":\"featured\", \"core_metadata\":\"metadata\", \"core_language\":\"language\", \"core_images\":\"images\", \"core_urls\":\"urls\", \"core_version\":\"version\", \"core_ordering\":\"ordering\", \"core_metakey\":\"metakey\", \"core_metadesc\":\"metadesc\", \"core_catid\":\"catid\", \"core_xreference\":\"xreference\", \"asset_id\":\"asset_id\"}, \"special\":{\"fulltext\":\"fulltext\"}}', 'PropertiHelperRoute::getListingRoute', '{\"formFile\":\"administrator\\/components\\/com_properti\\/models\\/forms\\/listing.xml\", \"hideFields\":[\"asset_id\",\"checked_out\",\"checked_out_time\",\"version\"],\"ignoreChanges\":[\"modified_by\", \"modified\", \"checked_out\", \"checked_out_time\", \"version\", \"hits\"],\"convertToInt\":[\"publish_up\", \"publish_down\", \"featured\", \"ordering\"],\"displayLookup\":[{\"sourceColumn\":\"catid\",\"targetTable\":\"#__categories\",\"targetColumn\":\"id\",\"displayColumn\":\"title\"},{\"sourceColumn\":\"created_by\",\"targetTable\":\"#__users\",\"targetColumn\":\"id\",\"displayColumn\":\"name\"},{\"sourceColumn\":\"access\",\"targetTable\":\"#__viewlevels\",\"targetColumn\":\"id\",\"displayColumn\":\"title\"},{\"sourceColumn\":\"modified_by\",\"targetTable\":\"#__users\",\"targetColumn\":\"id\",\"displayColumn\":\"name\"} ]}')

veuillez personnaliser selon vos besoins

un espoir cette aide ...

0
Abah Daaim