gpt4 book ai didi

javascript - 在 Wordpress Admin 中从 PHP 数组创建 'Download to CSV' 按钮

转载 作者:可可西里 更新时间:2023-11-01 00:08:09 24 4
gpt4 key购买 nike

我已经使用一个函数填充了一个多维 PHP 数组,我希望允许我的管理员用户下载内容。

我找到了一个 PHP 函数,它应该允许我将数组导出为 CSV 并将其放入我的 functions.php 中,使用第二个函数将其挂接到 AJAX 并使用 jQuery 来触发 AJAX 函数。

有什么问题?

所以我 99% 确定 AJAX 正确地发送到 PHP 函数,但由于某种原因没有开始下载。

我对此进行了很多研究,但一直在努力寻找解决方案 - 非常感谢指出正确方向的观点!

// Function to generate download

function convert_to_csv( $input_array, $output_file_name, $delimiter ) {
/** open raw memory as file, no need for temp files, be careful not to run out of memory thought */
$f = fopen( 'php://memory', 'w' );
/** loop through array */
foreach ( $input_array as $line ) {
/** default php csv handler **/
fputcsv( $f, $line, $delimiter );
}
/** rewrind the "file" with the csv lines **/
fseek( $f, 0 );
/** modify header to be downloadable csv file **/
header( 'Content-Type: application/csv' );
header( 'Content-Disposition: attachement; filename="' . $output_file_name . '";' );
/** Send file to browser for download */
fpassthru( $f );
}

我已经使用另一个函数将它连接到 Wordpress AJAX

function laura_function() {

$input_array = $_POST["inputarray"];

convert_to_csv($input_array, 'output.csv', ',');

exit;

}
add_action('wp_ajax_nopriv_ajaxlaurafunction', 'laura_function');
add_action('wp_ajax_ajaxlaurafunction', 'laura_function');

我还编写了一些 jQuery 函数来在单击按钮时进行 AJAX 调用

<button type="button" id="downloadcsv">Download CSV</button>

<script>

jQuery(document).ready(function () {
jQuery('#downloadcsv').click(function () {

var data = {
action: 'ajaxlaurafunction', // Calls PHP function - note it must be hooked to AJAX
inputarray: '<?php echo $inputarray?>', // Sends a variable to be used in PHP function
};

// This is a shortened version of: https://api.jquery.com/jquery.post/

jQuery.post("<?php echo admin_url('admin-ajax.php'); ?>", data, function () {
//window.location.replace(location.pathname)
});

});
});

最佳答案

根据@charlietfl 的建议,我发现“您不能通过 Ajax 完成此操作,因为 JavaScript 无法将文件直接保存到用户的计算机(出于安全考虑)。- According to this post

替代解决方案

我的替代解决方案是使用“post 方法”来设置 post 参数。

// Form on Page 
<form method="post" id="download_form" action="">
<input type="submit" name="download_csv" class="button-primary" value="Download CSV" />
</form>

如果“download_csv”参数已发布,此代码将运行以下载数据。目前我的代码将输出虚拟数据,但我正在努力。

add_action("admin_init", "download_csv");

function download_csv() {

if (isset($_POST['download_csv'])) {

function outputCsv( $fileName, $assocDataArray ) {
ob_clean();
header( 'Pragma: public' );
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Cache-Control: private', false );
header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment;filename=' . $fileName );
if ( isset( $assocDataArray['0'] ) ) {
$fp = fopen( 'php://output', 'w' );
fputcsv( $fp, array_keys( $assocDataArray['0'] ) );
foreach ( $assocDataArray AS $values ) {
fputcsv( $fp, $values );
}
fclose( $fp );
}
ob_flush();
}

// This is dummy data.

$data = array(
array( 'item' => 'Server', 'cost' => 10000, 'approved by' => 'Joe' ),
array( 'item' => 'Mt Dew', 'cost' => 1.25, 'approved by' => 'John' ),
array( 'item' => 'IntelliJ IDEA', 'cost' => 500, 'approved by' => 'James' ),
);


outputCsv( 'expenses.csv', $data );

exit; // This is really important - otherwise it shoves all of your page code into the download

}

}

关于javascript - 在 Wordpress Admin 中从 PHP 数组创建 'Download to CSV' 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com