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?
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());
}
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 ...