J'essaie de saisir tous les champs d'un nœud (ce que je fais en utilisant array_keys). À ce stade, je veux les nourrir tous dans entity_metadata_wrapper()
et récupérer leurs valeurs.
Je vais ensuite, s'il s'agit de chaînes, les imprimer dans un document PDF en utilisant la fonction Text()
de TCPDF.
Tout semble fonctionner correctement; cependant, certains champs donnent une erreur en tant que telle:
EntityMetadataWrapperException: propriété de données inconnue field_grade. dans EntityStructureWrapper-> getPropertyInfo ()
Le champ existe cependant dans mon nœud.
'field_grade' =>
array (size=13)
'default_value' => null
'description' => string '' (length=0)
'display' =>
array (size=4)
C'est le code que j'utilise.
$wrapper = entity_metadata_wrapper('node', $node);
$trip_fields = field_info_instances('node', 'trip');
$trip_fieldskeys = array_keys($trip_fields);
$margintop = 0;
foreach($trip_fieldskeys as $item) {
$value = $wrapper->$item->value();
if (gettype($value) == "string") {
$pdf->Text(0, $margintop, $value, false, false, true, 0, 0,
'', false, '', 0, false, 'T', 'M', false);
$margintop = $margintop + 25;
}
}
S'il s'agit d'un champ personnalisé que vous avez défini dans votre module (à l'aide de hook_field_info()
), vous devez ajouter un property_type
à vos informations de champ. Voir https://www.drupal.org/docs/7/api/entity-api/property-info-for-fields pour un exemple et https: //www.drupal .org/node/90558 pour une liste complète des types possibles.
Si votre champ est une structure de données complexe (à plusieurs valeurs), vous devrez peut-être également inclure property_callbacks
ainsi que. Voir http://d7.thecarneyeffect.co.uk/describe-field-properties-make-custom-fields-work-entity-metadata-wrappers pour un bon exemple de cela.
J'ai utilisé la bibliothèque FPDI pour PDF Création pour un noeud de type de contenu particulier
/* PDf Creationg Start */
$pdf=new PDF_HTML_Table();
$pdf->AddPage('L');
$pdf->SetXY(10.0,5.0);
$pdf->SetDisplayMode('fullwidth');
$pdf->SetLeftMargin(4.0);
$pdf->SetTitle('Your Title',false);
$pdf->SetFont('Arial','',7);
$pdf->SetFontSize(12);
$title_page = 'Dated : '.date('jS F Y');
$pdf->Text(10,28,$title_page);
$pdf->SetFontSize(7);
$header=array('your_field_no1','your_field_no2','your_field_no_n..');
$rows = array();
/* Get Node Content */
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'your_content_type_name')
->propertyCondition('status', 1, '=')
->propertyOrderBy('created','DESC')
->fieldCondition('field_name', 'value', $_GET['mname'],'=');
$results = $query->execute();
if (isset($results['node'])) {
$nodes = node_load_multiple(array_keys($results['node']));
$counter = 0;
foreach($nodes as $row) {
$data = array();
if(sizeof($row->your_field_no1) > 0)
{
$your_data_array[] = $row->your_field_no1['und'][0]['value'];
}
if(sizeof($row->your_field_no2) > 0)
{
$your_data_array[] = $row->your_field_no2['und'][0]['value'];
}
// and so on..
$rows[] = $data;
}
}
$pdf->Ln(35);
$pdf->SetFont('Arial','',9);
$pdf->SetWidths(array(40,40,40,40,40,40,50));
$pdf->SetAligns('C');
$pdf->FilterRow($data_header);
$pdf->SetWidths(array(40,40,40,40,40,40,50));
$pdf->FilterRow($data);
$filename = "your_desired_name_plus_".date('jS-F-Y-h-i-s').'.pdf';
$pdf->Output($filename,"D");
et ça marche sur mon site ... j'espère que ça aide
Erreurs fatales PHP lors de l'appel de $wrapper->field_foo->value()
sur un wrapper $ vide. Vous devez vérifier que le nœud possède ce champ avant d'appeler $wrapper->field_foo->value()
. Cette gestion des exceptions, soyez prudent avec EntityMetadataWrapper
. Et vous pouvez essayer avec:
$wrapper = entity_metadata_wrapper('node', $node);// you need sure with varibale $node
foreach ($wrapper->getPropertyInfo() as $key => $val) {
$value = $wrapper->$key->value();
if (gettype($value) == "string") {
$pdf->Text(0, $margintop, $value, false, false, true, 0, 0,
'', false, '', 0, false, 'T', 'M', false);
$margintop = $margintop + 25;
}
}