13ответ(ов) в теме
Николай
не в сети 1 год
На сайте с 03.11.2015
Участник
Тем 24
Сообщения 83
1
21:19
Версия WP-Recall: 16.17.15

Здравствуйте!
В своем дополнении я подключил 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 для передачи данных использовать не стал, решил пока по-проще сделать.
Вышеприведеный скрипт в консоли отображается, то есть в доде страницы присутствует, но не работает. Может его тоже необходимо вынести в хидер или футер? Или такая конструкция в принципе не допустима?

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
2
21:22

jQuery("#my-download-export-addon-js").on("click" ...

и что там? Ожидается клик по id my-download-export-addon-js - а где он у вас в верстке? Я его не вижу

0
Николай
не в сети 1 год
На сайте с 03.11.2015
Участник
Тем 24
Сообщения 83
3
21:30

Да, он присутствует перед скриптом:

    $allPayments = $Rcl_Payments_History->get_data();
?>
    <div id="my-show-export-addon-js" style = "min-height:150px;"></div>
    <p><button id='my-download-export-addon-js'>Экспорт данных в CSV</button></p>

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
4
22:22

ну дебажьте все переменные
data что-то содержит?

0
Николай
не в сети 1 год
На сайте с 03.11.2015
Участник
Тем 24
Сообщения 83
5
06:59

Да, data содержит массив тех данных, которые я получил. Содержимое массива можно промотреть из консоли, с ним как раз все в порядке. Но на div и на кнопке "Экспорт данных в CSV" не видно event-ов.

0
Андрей CS
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
6
08:12

может быть функция jexcel на момент объявления не определена, сам скрипт где подключается? что то подсказывать сложно не видя результата, дали бы ссылку

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
7
09:35

Ну вот смотрим - данные WP-Recall вы получаете. Значит никакого вопроса по данному плагину нет. А вот с jexcel возникли сложности - значит надо обращаться к его документации или к первоисточнику - автору данной библиотеки.

Вопрос не по дополнению WP-Recall

0
Николай
не в сети 1 год
На сайте с 03.11.2015
Участник
Тем 24
Сообщения 83
8
19:11

Здравствуйте!

Андрей 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>';
}

Редакции сообщения
16.08.2019 19:13НиколайПричина: не указано
0
Николай
не в сети 1 год
На сайте с 03.11.2015
Участник
Тем 24
Сообщения 83
9
19:22

Здравствуйте!

Дружаев Владимир (Otshelnik-Fm) сказал(а)
Ну вот смотрим - данные WP-Recall вы получаете. Значит никакого вопроса по данному плагину нет. А вот с jexcel возникли сложности - значит надо обращаться к его документации или к первоисточнику - автору данной библиотеки.

Если бы скрипт, хотя бы заработал, и выдал бы ошибку - то это бы значило что действительно что-то не так с библиотекой. И тогда у меня бы не было вопросов к разработчикам плагина. Но, поскольку js не срабатывает вообще, то это возможно, все-таки касается особенностей работы плагина, которые я не учел. В таком случае мой вопрос может быть полезен не только мне но и любому другому человеку, который начнет разарабатывать свое дополнение к Wp-Recall.
Я очень благодарен Вам за каждый дельный совет, который помогает мне, в общем-то не большому специалисту, решать достаточно серъезные задачи с помощью продкутов с Вашего сайта.

0
Андрей CS
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
10
20:10

С какой легкостью вы пришиваете wp-recall ко всему на свете! я вижу только одну причину этого - на этом форуме помощи быстрее дождешься чем где бы то ни было, даже если wp-recall ни при чем.
Вроде и неплохо, но ... 😖 есть же ветка под WP скидывайте такие темы туда.
У вас проблемы на базовом уровне.
Во-первых, не смотрите в консоль, там болтается ошибка Uncaught SyntaxError: Unexpected number
Во-вторых, не знаете, что в js строки обрамляются кавычками, такой массив

[7324, 30338, 12585, 1300, 2019-08-16 17:16:36, 2, unitpay, ]

неверен.
Если не хотите отделять мух от котлет, то помещайте в кавычки все элементы массива - хуже не будет.
И плагин тут ни при чем.

0
Андрей CS
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
11
20:20

а, тут же доп к плагину создается, пусть тогда тема тут побудет)

0
Николай
не в сети 1 год
На сайте с 03.11.2015
Участник
Тем 24
Сообщения 83
12
20:28

Благодарю, правда получилось. Как минимум скрипт заработал.
Всего только добавил добавление кавычек в каждый элемент массива:

	$dataPayments = "[";
	foreach ($allPayments as $payment) {
        $dataPayments .= "[";
        foreach ($payment as $cell) {
                $dataPayments .= '"' . htmlspecialchars($cell) . '"' . ', ';
        }
        $dataPayments .= "],n";
	}
	$dataPayments .= '];';

0
Николай
не в сети 1 год
На сайте с 03.11.2015
Участник
Тем 24
Сообщения 83
13
20:30

Буду дальше работать, вопрос по js в коде дополнения решен. Тему можно закрыть, благодарю за помощь и поддержку, работу над допом продолжаю.

0
Тема закрыта. Публикация новых сообщений запрещена.