發票

2012-09-27 55 views
0

Drupal的自定義文件類型我有一個內容類型 '發票'發票

我想添加一個字段invoice_number例如:ABC2012001

  • ABC:前綴,

  • 2012:更改每年,

  • 001:發票的編號(每年重置)

該字段是自動增量。

我該怎麼做?有沒有編程或者我必須使用鉤子函數?

回答

0

您可以使用node_presave掛鉤與自定義模塊做到這一點。用戶只在「invoice_number」字段中輸入前綴值。之前,節點被保存到數據庫中你的鉤子執行以下操作:

如果節點類型爲「發票」的和尚未保存的「NID == 0」

  • 獲得本年度
  • 得到發票的當前數量今年(無論是從存儲的變量或數據庫查詢)
  • 改變字段值和追加一年/數

所以沿東西線這個:

<?php 

function mymodule_node_presave($node){ 
    if (($node->type == 'invoice') && ($node->nid == 0)) { //node has not been saved 
     //get the current year 
     $this_year = date('Y'); 

     if ($count = variable_get('invoice_count_'.$this_year,0)){ 
      //have the invoice number 
     }else{ 
      //get the number of invoices created this year from DB 
      $count_query = "SELECT COUNT(DISTINCT nid)) FROM {node} WHERE type = :type AND FROM_UNIXTIME(created,'%Y') = :year"; 
      $count = db_query($count_query,array(':type'=>'invoice',':year'=>$this_year))->fetchField(); 
     } 

     $invoice_count = $count; 
     //append number with 0's? 
     $invoice_count = str_repeat('0',(3-strlen($invoice_count))).$invoice_count; 
     //alter the field value and append the year.number 
     $node->field_invoice_number['und'][0]['value'].=$this_year.$invoice_count; 
     //save the increment 
     variable_set('invoice_count_'.$this_year,($count+1)); 
    } 

} 
+0

太棒了!非常感謝你!很好的作品。 – user1704548