J'utilise ce code dans une substitution de module qui rend les articles, pour afficher les champs personnalisés:
<?php
$id=$item->id;
$db = JFactory::getDbo();
$query = 'select * from #__fields_values where item_id = "'.$id.'"';
$db->setQuery($query);
$fields = $db->loadObjectList();
foreach ($fields as $field) {
if ($field->field_id == 4) { // 4 - id of your custom field
echo $field->value;
}
}
?>
Cela fonctionne bien et rend la valeur du champ, mais je veux aussi afficher l'étiquette du champ. De l'aide?
Merci
Le label est dans la table 'fields', vous pouvez donc les extraire avec les valeurs d'une seule requête en utilisant une jointure, par exemple.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('a.value,b.label,b.id');
$query->from($db->qn('#__fields_values','a'));
$query->join('INNER', $db->qn('#__fields', 'b') . ' ON ' . $db->qn('a.field_id') . ' = ' . $db->qn('b.id'));
$query->where($db->qn('a.item_id') . ' = ' . $db->q($item->id));
$query->where($db->qn('b.context') . ' = ' . $db->q('com_content.article'));
$db->setQuery($query);
$fields = $db->loadObjectList('b.id'); // add the field id as the key
// For testing to see the whole array
echo '<pre>' . print_r($fields,1) . '</pre>';
// To show only specific fields, eg for field id 4
echo '<p>' . $fields[4]->label . ': ' . $fields[4]->value . '</p>';
// to show all the fields - warning they wont be in the order set in the fields interface
foreach ($fields as $field_id => $field) {
echo '<p class="fid-' . $field_id . '">' . $field->label . ': ' . $field->value . '</p>';
}