0

コンテンツ タイプ「請求書」があります

invoice_numberたとえば、フィールドを追加したい:ABC2012001

  • ABC: プレフィックス、

  • 2012年:毎年変わり、

  • 001 : 請求書の番号 (毎年リセット)

THE フィールドは自動インクリメントです。

これどうやってするの?プログラミングなしで可能ですか、それとも THE フック関数を使用する必要がありますか?

4

1 に答える 1

0

node_presaveフックを使用して、カスタム モジュールでこれを行うことができます。ユーザーは「invoice_number」フィールドに接頭辞の値を入力するだけです。ノードがデータベースに保存される前に、フックは次のことを行います。

ノードのタイプが 'invoice' で、まだ保存されていない場合 '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));
    }

}
于 2012-09-27T21:31:31.677 に答える