SOY CMS / SOY Shop

ブログトップ

SOY Shopプラグインの解説 注文個別の納品書やCSVを出力する

2014年02月24日

印刷用の納品書であったり他システムと連携するためのCSVの出力用にsoyshop.order.function.phpやsoyshop.order.export.phpといった拡張ポイントが用意されています。

SOY Shopプラグインの解説 拡張ポイントについて


今回はそのうちのsoyshop.order.function.phpについての説明を記載します。




今回は1.13.5に同梱予定の印刷用納品書作成プラグイン バージョン1.2をベースで話を進めます。

(プラグインID : order_invoice)

order_invoice_1.2.zipのダウンロード


構造は下記のようになっています。



soyshop.config.phpとsoyshop.info.phpの拡張ポイントは省略します。

SOY Shopプラグインの解説 詳細画面の作成


今回の本題のsoyshop.order.function.phpとsoyshop.order.export.phpですが、

どちらも注文の納品書やCSVファイルを出力するポイントになっています。


functionとexportの違いは、




functionが個々の注文詳細の右下にボタンを追加するもので、



exportが注文一覧の検索結果をエクスポートするにボタンを追加するものです。




/soyshop/webapp/src/logic/plugin/extensions/soyshop.order.function.php

を見てみると


class SOYShopOrderFunction implements SOY2PluginAction{

	private $orderId;

	/**
	 * title text
	 */
	function getTitle(){}
	
	/**
	 * @return html
	 */
	function getPage(){}

	function getOrderId() {
		return $this->orderId;
	}
	function setOrderId($orderId) {
		$this->orderId = $orderId;
	}
}

getTitleとgetPage関数が用意されています。


getTitle関数は



ボタン表示の際の表記に関わっており、



getPageはreturnでHTMLを返すことで、

上記のような納品書を出力させたり、


header("Cache-Control: public");
header("Pragma: public");
header("Content-Disposition: attachment; filename=ehiden_" . $orderId.".csv");
header("Content-Type: text/csv; charset=" . htmlspecialchars($charset) . ";");
		
echo mb_convert_encoding(implode("," , $labels,$charset,"UTF-8");
echo "\r\n";
echo $line;
exit;	//csv output

(ehiden_order_csvより)


関数内でheaderを指定することで、CSVファイルの発行を行うことができます。




印刷用納品書作成プラグインのgetPage内は


function getPage(){
	SOY2::import("module.plugins.order_invoice.common.OrderINvoiceCommon");
	$template = OrderINvoiceCommon::getTemplateName();
	$html = file_get_contents(dirname(__FILE__) . "/template/" . $template . ".html");
		
	SOY2DAOFactory::create("order.SOYShop_ItemModule");
	SOY2DAOFactory::create("config.SOYShop_ShopConfig");
		
	include_once(dirname(__FILE__) . "/page/InvoicePage.class.php");	
	$page = SOY2HTMLFactory::createInstance("InvoicePage", array(
		"arguments" => array("main_invoice", $html),
		"orderId" => $this->getOrderId()
	));
		
	$page->setTitle("納品書"); //metaのtitleタグに入れる値
	$page->build_invoice(); //InvoicePageで用意した関数
		
	ob_start();
	$page->display();
	$html = ob_get_contents();
	ob_end_clean();
	
	return $html;
}

その後にSOY2HTMLFactory::createInstanceでHTMLTemplatePageクラスを継承したページクラスを読み込んで、

あらかじめincludeしておいたHTMLファイルにsoy:idを追加していく。

という処理をしています。

SOY Shopプラグインの解説 パーツモジュールとHTMLTemplatePageについて