web-dev-qa-db-fra.com

Pourquoi le message d'erreur "Propriété de données inconnue" s'affiche-t-il lorsque le champ existe?

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;
  }
}
6
Jack Ryan

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.

3
Martin Q

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

1
Kamal Oberoi

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;
   }
  }
1
MrD