0

Aheadworks ヘルプデスク モジュールを使用しており、特定の情報を取得するための 2 番目のフォームを作成し、そのフォームを使用してすべてのフォーム コンテンツがヘルプデスクの「コンテンツ」セクションに投稿されるチケットを作成しようとしています。

問題は、name="content" を使用すると、"content" セクションに投稿されるのは単に "Array" になることです。

フォーム コードは非常に単純です。

<form id="helpdesk-ticket-form" action="../helpdeskultimate/customer/new/" method="post" enctype="multipart/form-data"><input name="title" value="WHOLESALE SETUP REQUEST" type="hidden">
<div><label for="title_field">Name<span class="required">*</span></label><br> <input id="title" class="input-text required-entry" style="width: 250px;" name="" value="" type="text"></div>
<div>&nbsp;</div>
<div><label for="title_field">Company Name<span class="required">*</span></label>    <br><input id="content_field" class="input-text " title="Company" name="content" value="" type="text"></div>
<input name="department_id" value="2" type="hidden">
<div>&nbsp;</div>
<div><label for="content_field">Message<span class="required">*</span></label><br>     <textarea id="content_field" class="required-entry" style="width: 450px;" name="content" rows="10" cols="53"></textarea></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><label for="filename">Attach Reseller Permit (2Mb limit)</label><br> <input id="filename" class="input-file" style="width: 450px;" name="filename" type="file"></div>
<div class="button-set">&nbsp;</div>
<div class="button-set"><span><span><br></span></span></div>
<div class="button-set"><button class="button right form-button" type="submit"><span>  <span>Submit ticket</span></span> </button></div>
</form>

name="content[]" を使用してみましたが、「配列」も返されました

モジュールは、次の post メソッドを使用しているようです。

public function newAction()
{
    if (!$this->_getCustomerSession()->getCustomerId()) {
        $this->_getCustomerSession()->authenticate($this);
        return;
    }
    $session = Mage::getSingleton('core/session');
    $customer = $this->_getCustomerSession()->getCustomer();

    $Proto = Mage::getModel('helpdeskultimate/proto');
    $postData = $this->getRequest()->getPost();

    if (isset($postData['department_id'])) {
        $Proto->setDepartmentId($postData['department_id']);
    }
    try {

        $Proto
                ->setSubject(@$postData['title'])
                ->setContent(@$postData['content'])
                ->setPriority(@$postData['priority'])
                ->setStoreId(Mage::app()->getStore()->getId())
                ->setFrom(Mage::getSingleton('customer/customer')->getId())
                ->setSource('web');

メッセージフィールドへの挿入はここから来ているようです:

/* Insert */
    try {
        $message->setContent(trim($data['content']));
        $validateResult = $message->validate();

完全なコントローラ ファイルは、 http: //www.gingabox.com/CustomerController.zip からダウンロードできます。

@$postData['content'] で foreach ステートメントを実際に使用する方法、またはより良い解決策があるかどうかはわかりません。

喜んで AheadWorks に問い合わせたいのですが、現時点ではカスタマイズに関する問い合わせは受け付けていないとのことです (忙しすぎるため)...

どんな助けでも大歓迎です!

4

2 に答える 2

1

「配列」という言葉は、PHP 配列を文字列に変換したときに得られるものです。配列の値には何でも含めることができるため、PHP は配列を変換する方法を理解しようとせず、文字列を返すだけ"Array"です。これはまさに次の行で起こることです:

// The trim() function casts $data as a string => string(5) "Array"
$message->setContent(trim($data['content']));

など、配列の内容の文字列表現を返す関数がありますprint_r()。これにより、複数行の文字列で配列が吐き出されるため、コードに組み込むと次のようになります。

$message->setContent(print_r($data['content'], TRUE));

配列の内容を単一行の文字列として使用するforeach()場合は、質問で述べたようなステートメントを使用する必要があります。簡単な例を次に示します。

$contentString = 'Second Form values:' . PHP_EOL;
foreach($data['content'] as $key => $value) {
    $contentString .= PHP_EOL . '    ' . $key . ': ' . $value;
}

次に、配列値に直接$contentStringアクセスする代わりに、メッセージとして使用できます。$dataあなたの例でメソッドが何をしているのかわかりませんがvalidate()、電子メールの本文として使用する前に、この 2 番目のフォーム内の値を適切にエスケープしていることを確認することをお勧めします。

于 2013-09-01T14:58:44.947 に答える