Здравствуйте!
В своем дополнении я подключил js библиотеки.
За основу взял два примера:
Из примеров взяты следующие функции:
data = [ [3, 'Classe A', 'Cheese', 1, '2017-01-12'], [1, 'Classe B', 'Apples', 1, '2017-01-12'], [2, 'Classe A', 'Carrots', 1, '2017-01-12'], [1, 'Classe C', 'Oranges', 0, '2017-01-12'], ]; $('#my').jexcel({ data:data, colHeaders: [ 'Country', 'Description', 'Type', 'Stock', 'Next purchase' ], colWidths: [ 300, 80, 100, 60, 120 ], columns: [ { type: 'autocomplete', url:'/jexcel/countries' }, { type: 'text' }, { type: 'dropdown', source:[ {'id':'1', 'name':'Fruits'}, {'id':'2', 'name':'Legumes'}, {'id':'3', 'name':'General Food'} ] }, { type: 'checkbox' }, { type: 'calendar' }, ] });
и
$('#download').on('click', function () { $('#my').jexcel('download'); })
Эти две функции вписал прямо в php файл дополнения.
Выглядит это так:
echo "<script>"; echo "data = "; $dataPayments = "["; foreach ($allPayments as $payment) { $dataPayments .= "["; foreach ($payment as $cell) { $dataPayments .= htmlspecialchars($cell) . ", "; } $dataPayments .= "],\n"; } $dataPayments .= '];'; echo $dataPayments; echo 'jQuery("#my-show-export-addon-js").jexcel({'; echo ' data:data,'; echo ' colHeaders: [ "Country", "Description", "Type", "Stock", "Next purchase", "Type", "Stock", "Next purchase" ],'; echo ' colWidths: [ 300, 80, 100, 60, 120, 100, 60, 120 ],'; echo ' columns: ['; echo ' { type: "number" },'; echo ' { type: "number" },'; echo ' { type: "number" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' ]'; echo '});'; echo 'jQuery("#my-download-export-addon-js").on("click", function () {'; echo ' jQuery("#my-show-export-addon-js").jexcel("download");'; echo '});'; echo '</script>';
Ajax для передачи данных использовать не стал, решил пока по-проще сделать.
Вышеприведеный скрипт в консоли отображается, то есть в доде страницы присутствует, но не работает. Может его тоже необходимо вынести в хидер или футер? Или такая конструкция в принципе не допустима?
Здравствуйте!
Андрей CS сказал(а)
может быть функция jexcel на момент объявления не определена, сам скрипт где подключается? что то подсказывать сложно не видя результата, дали бы ссылку
Дело в том, что это дополнение работает только в админке. Могу дать доступ, в личку.
Полный код:
<?php add_action( 'admin_menu', 'rcl_export_admin_menu', 30 ); function rcl_export_admin_menu() { add_submenu_page( 'manage-wprecall', __( 'Export fields', 'wp-recall' ), __( 'Export fields', 'wp-recall' ), 'manage_options', 'user-profile-pay-export', 'rcl_export_fields_manager' ); } add_action('admin_enqueue_scripts','rcl_admin_user_account_scripts_export_addon'); function rcl_admin_user_account_scripts_export_addon(){ wp_enqueue_style('jquery-jexcel-css','https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/css/jquery.jexcel.min.css', NULL, true); wp_enqueue_style('jquery-jdropdown-css','https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/css/jquery.jdropdown.min.css', NULL, true); wp_enqueue_style('jquery-jcalendar-css','https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/css/jquery.jcalendar.min.css', NULL, true); wp_enqueue_script( 'jquery-jexcel-js', 'https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/js/jquery.jexcel.js', NULL, true); wp_enqueue_script( 'jquery-jdropdown-js', 'https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/js/jquery.jdropdown.js', NULL, true); wp_enqueue_script( 'jquery-jcalendar-js', 'https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/js/jquery.jcalendar.js', NULL, true); } function rcl_export_fields_manager() { global $Rcl_Payments_History; $option = 'per_page'; $args = array( 'label' => __( 'Payments', 'wp-recall' ), 'default' => 50, 'option' => 'rcl_payments_per_page' ); add_screen_option( $option, $args ); $Rcl_Payments_History = new Rcl_Payments_History(); $Rcl_Payments_History->prepare_items(); $sr = ($Rcl_Payments_History->sum)? floor($Rcl_Payments_History->sum/$Rcl_Payments_History->total_items): 0; echo '<div class="wrap"><h2>Экспорт данных</h2>'; echo '<p>'.__('All payments','wp-recall').': '.$Rcl_Payments_History->total_items.' '.__('for the amount of','wp-recall').' '.$Rcl_Payments_History->sum.' '.rcl_get_primary_currency(1).' ('.__('Average check','wp-recall').': '.$sr.' '.rcl_get_primary_currency(1).')</p>'; echo '<p>'.__('Total in the system','wp-recall').': '.$Rcl_Payments_History->sum_balance.' '.rcl_get_primary_currency(1).'</p>'; //echo '<p>Средняя выручка за сутки: '.$day_pay.' '.rcl_get_primary_currency(1).'</p>'; echo rcl_get_chart_payments($Rcl_Payments_History->items); ?> <form method="get"> <input type="hidden" name="page" value="user-profile-pay-export"> <?php $Rcl_Payments_History->months_dropdown('rcl_payments'); submit_button( __( 'Filter', 'wp-recall' ), 'button', '', false, array('id' => 'search-submit') ); ?> </form> <form method="post"> <input type="hidden" name="page" value="user-profile-pay-export"> <?php $Rcl_Payments_History->search_box( __( 'Search', 'wp-recall' ), 'search_id' ); $Rcl_Payments_History->display(); ?> </form> </div> <?php $allPayments = $Rcl_Payments_History->get_data(); print_r($allPayments); echo '<style type="text/css">'; echo '.wp-list-table .column-payment_number { width: 5%; }'; echo '.wp-list-table .column-payment_user { width: 30%; }'; echo '.wp-list-table .column-payment_id { width: 15%; }'; echo '.wp-list-table .column-payment_sum { width: 10%;}'; echo '.wp-list-table .column-payment_date { width: 15%;}'; echo '.wp-list-table .column-pay_system { width: 15%;}'; echo '.wp-list-table .column-pay_type { width: 10%;}'; echo '</style>'; ?> <div id="my-show-export-addon-js" style = "min-height:150px;"></div> <p><button id='my-download-export-addon-js'>Экспорт данных в CSV</button></p> <?php echo "<script>"; echo "data = "; $dataPayments = "["; foreach ($allPayments as $payment) { $dataPayments .= "["; foreach ($payment as $cell) { $dataPayments .= htmlspecialchars($cell) . ", "; } $dataPayments .= "],n"; } $dataPayments .= '];'; echo $dataPayments; echo 'jQuery("#my-show-export-addon-js").jexcel({'; echo ' data:data,'; echo ' colHeaders: [ "Country", "Description", "Type", "Stock", "Next purchase", "Type", "Stock", "Next purchase" ],'; echo ' colWidths: [ 300, 80, 100, 60, 120, 100, 60, 120 ],'; echo ' columns: ['; echo ' { type: "number" },'; echo ' { type: "number" },'; echo ' { type: "number" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' { type: "text" },'; echo ' ]'; echo '});'; echo 'jQuery("#my-download-export-addon-js").on("click", function () {'; echo ' jQuery("#my-show-export-addon-js").jexcel("download");'; echo '});'; echo '</script>'; }
Здравствуйте!
Дружаев Владимир (Otshelnik-Fm) сказал(а)
Ну вот смотрим - данные WP-Recall вы получаете. Значит никакого вопроса по данному плагину нет. А вот с jexcel возникли сложности - значит надо обращаться к его документации или к первоисточнику - автору данной библиотеки.
Если бы скрипт, хотя бы заработал, и выдал бы ошибку - то это бы значило что действительно что-то не так с библиотекой. И тогда у меня бы не было вопросов к разработчикам плагина. Но, поскольку js не срабатывает вообще, то это возможно, все-таки касается особенностей работы плагина, которые я не учел. В таком случае мой вопрос может быть полезен не только мне но и любому другому человеку, который начнет разарабатывать свое дополнение к Wp-Recall.
Я очень благодарен Вам за каждый дельный совет, который помогает мне, в общем-то не большому специалисту, решать достаточно серъезные задачи с помощью продкутов с Вашего сайта.
С какой легкостью вы пришиваете wp-recall ко всему на свете! я вижу только одну причину этого - на этом форуме помощи быстрее дождешься чем где бы то ни было, даже если wp-recall ни при чем.
Вроде и неплохо, но ... 😖 есть же ветка под WP скидывайте такие темы туда.
У вас проблемы на базовом уровне.
Во-первых, не смотрите в консоль, там болтается ошибка Uncaught SyntaxError: Unexpected number
Во-вторых, не знаете, что в js строки обрамляются кавычками, такой массив
[7324, 30338, 12585, 1300, 2019-08-16 17:16:36, 2, unitpay, ]
неверен.
Если не хотите отделять мух от котлет, то помещайте в кавычки все элементы массива - хуже не будет.
И плагин тут ни при чем.
Благодарю, правда получилось. Как минимум скрипт заработал.
Всего только добавил добавление кавычек в каждый элемент массива:
$dataPayments = "["; foreach ($allPayments as $payment) { $dataPayments .= "["; foreach ($payment as $cell) { $dataPayments .= '"' . htmlspecialchars($cell) . '"' . ', '; } $dataPayments .= "],n"; } $dataPayments .= '];';