zoddak
@zoddak
Осваиваю vue.js

Как вывести в BootstrapTable данные из MongoDB, предварительно правильно пересобрать массив в PHP?

Не пойму как в обработчике handler.php правильно сконфигурировать массив, привести его к такому виду - тестовый BootstrapTable. С ним таблица работает правильно.

Массив ТЕСТОВЫЙ - с ним таблица работает.
5efdcd15c0d7d963333867.gif
Выборка данных из БД MongoDB осуществляется обработчиком (PHP) - handler.php:
if ($_POST['data_host'] == 1) {

    try { // подключаемся к MongoDB

        $mongo = new MongoDB\Client('mongodb://localhost:27017');
        $collection = $mongo->mydatabase->customers; // выбираем коллекцию

        $array = [];
        $cursor = $collection->find([], array('_id', 'ip', 'port')); // возвращаемый курсор с заданными значениями


        $k=0;
        foreach ($cursor as $document) {

            $array[$k] = array(

                'rows'  => array(

                    'id' => $k,
                    'ip' => $document['ip'],
                    'port' => $document['port']
            ));

            //printf("%s: %s, %s\n", $k, $document['ip'], $document['port']);
            $k++;
        }

        // отправляем назад данные
        echo json_encode( $new );
    } catch ( Exception $e ) {

        echo '<p>Невозможно подключиться к MongoDB.</p>';
        exit();
    }
}

В итоге формируется массив, с которым не работает таблица. НЕРАБОЧИЙ ВАРИАНТ - с ним таблица не работает.
5efdcdd52bde6318131074.gif
table.html
<div class="content">
    <div class="fresh-table full-color-red">
        <div class="toolbar"></div>
        <table id="host_table" class="table"></table>
    </div>
</div>

table.js
if (document.getElementById('host_table')) {

    // инициализируем таблицу
    $table = $('#host_table');

    $(function () {

        $table.bootstrapTable('destroy').bootstrapTable({
            method: 'post',
            url: HANDLER_URL + '?data_host=1',
            classes: 'table table-hover table-striped',
            toolbar: '.toolbar',
            search: true,
            pagination: true,
            striped: true,
            sortable: true,
            pageSize: 9,
            columns: [
                { field: 'id', title: 'ID', align: 'left', visible: true },
                { field: 'ip', title: 'IP', align: 'left', visible: true },
                { field: 'port', title: 'Port', align: 'left', visible: true }
            ],
            formatShowingRows: function (pageFrom, pageTo, totalRows) {

                return 'Showing ' + pageFrom + ' to ' + pageTo + ' of ' + totalRows + ' RDP host';
            }
        })
    })
}


-- ПРАВКИ --
Поправил логику "пересборки" массива, доведя до эталонного (тестового) на выходе:
// получаем данные таблицы
if ($_POST['data_rdphost'] == 1) {

	try { // подключаемся к MongoDB

        $mongo      = new MongoDB\Client('mongodb://localhost:27017'); // без авторизации
        $collection = $mongo->mydatabase->customers; // выбираем коллекцию
        $cursor     = $collection->find([], array('ip', 'port')); // возвращаемый курсор с заданными значениями
        $arr        = []; // инициализируем массив
        $k          = 0; // начальный id

        // вносим в массив данные
        foreach ($cursor as $document) {

            array_push($arr, array(

                    'id' => $k,
                    'ip' => $document['ip'],
                    'port' => $document['port']
                )
            );

            $k++;
        }

        // сращиваем массивы
        $array = array(

            'total' => 100,
            'totalNotFiltered' => 100,
            'rows' => $arr
        );

        // кодируем ответ
        echo json_encode($array);
    } catch ( Exception $e ) {

        echo '<p>Невозможно подключиться к MongoDB. Проверьте работоспособность кода и процесса MongoDB.</p>';
        exit();
    }
}

5efdf1e5e3510160998121.gif
Но таблица по прежнему не работает. Друзья, нужна ваша помощь.

  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
zoddak
@zoddak Автор вопроса
Осваиваю vue.js
Почему то заработало только с GET-запросом, немного еще подкорректировал...
if ($_GET['data_rdphost'] == 1) {

	try { // подключаемся к MongoDB

        $mongo      = new MongoDB\Client('mongodb://' . MONGO_HOST . ':' . MONGO_PORT); // без авторизации
        $collection = $mongo -> mydatabase -> rdp_host; // выбираем коллекцию
        $cursor     = $collection -> find([], array('ip', 'port')); // возвращаемый курсор с заданными значениями
        $arr        = []; // инициализируем массив
        $k          = 1; // начальный id

        // вносим в массив данные
        foreach ($cursor as $document) {

            array_push($arr, array(

                    'id' => $k,
                    'ip' => $document['ip'],
                    'port' => $document['port']
                )
            );

            $k++;
        }

        // сращиваем массивы
        $array = array( 'rows' => $arr );

        // кодируем ответ
        echo json_encode($array);
    } catch ( Exception $e ) {

        echo '<p>Невозможно подключиться к MongoDB. Проверьте работоспособность кода и процесса MongoDB.</p>';
        exit();
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы