Amazon S3(AWS)でExcelファイルが開かずにブラウザで文字列での表示になってしまう

せっかくデータベースのデータを抽出してExcelファイルを作成することができたのに、ファイルリンクを踏んでもExcelファイルとしてダウンロードにならずやや焦りました。ググってもそれらしき内容が出てこなく時間を取られてしまいました。
メタデータの Content-Disposition を設定すればよいようです。PHPファイル上では、インスタンス生成後に$s3client->putObject()内で、’ContentDisposition’ => ‘attachment’を追加したらうまくいきました。

  // S3clientのインスタンス生成
    $s3client = new Aws\S3\S3Client([
        'credentials' => [
            'key' => AWS_ACCESS_KEY,
            'secret' => AWS_SECRET_ACCESS_KEY
        ],
        'region' => 'ap-northeast-1',
        'version' => 'latest'
    ]);
    
    try {
        $s3client_CSV_upload = $s3client->putObject([
            'ACL' => 'public-read',
            'Bucket' => AWS_S3_BUCKET_NAME,
            'Key' => $upload_file['file_name'],
            'SourceFile' => $upload_file['file_path'],
            'ContentType' => mime_content_type($upload_file['file_path']),
            'ContentDisposition' => 'attachment'
        ]);
        
        // アップロードファイルのURL取得
        $results['upload_name'] = $s3client_CSV_upload['ObjectURL'];
        $results['result'] = 'SUCCESS';
    } catch (Exception $e) {
        $results['result'] = 'UPLOAD_ERROR';
        errorLog($e);
    }

Smartyの定数をJavaScriptメソッドで処理する

Smarty定数をJavaScriptのメソッドで処理して表示させたいのにできない!という状態に陥りました。
scriptタグのdata属性にSmartyの値を入れてみたのですが、文言の定数のためか上手く文言が表示されず…

最終的には、一度メソッド内に変数をつくって、そこにSmarty定数を代入するという方法に落ち着きました。以下が手順です。

手順
① Smartyの定数を代入するためのJavaScript変数を作成
② {/literal} と{literal} を使ってJavaScriptを外した状態でSmarty定数を記述
③ ②のsmarty定数を①の変数に代入

{literal}
 <script type="text/javascript">
  function check(){
   var delete_move = "{/literal}{$smarty.const.DELETE_MOVE}{literal}";
   return confirm(delete_move);
  }
 </script>
{/literal}

<a href="index.php?action=record_delete" {literal}onclick="return check()"{/literal}>
 {$smarty.const.COMMON_DELETE}
</a>