Как вывести в гриде массив через ArrayDataProvider [Решено]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Как вывести в гриде массив через ArrayDataProvider [Решено]

Сообщение svil »

Есть массив после потрошения XML.

Код: Выделить всё

Array ( [1] => Dell [2] => Asus [3] => HP [4] => Acer )
Но в gridview он не выводится и вместо значений "not set"
контроллер

Код: Выделить всё

<?php

namespace app\controllers;

use app\models\Categories;
use Yii;
use yii\data\ArrayDataProvider;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;


class ProductsarController extends Controller
{



    public function actionIndex()
    {

        $categories = simplexml_load_file('categories.xml');
        foreach($categories->item as $item)
        {
            $k1= (string)$item->id;
           $k2 = (string) $item->name;
            $datac[$k1]=$k2;
           
        }

        $dataProvider= new ArrayDataProvider([
            'allModels' => $datac,

            'sort' => [
                'attributes' => ['id', 'name'],
            ],
        ]);




// получает строки для текущей запрошенной странице
        $rows = $dataProvider->getModels(); //зачем это надо - не нашла


        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'datac' => $datac,

        ]);
    }

}

вид

Код: Выделить всё

<?php

use yii\grid\GridView;


print_r($datac);

echo \yii\grid\GridView::widget(
    [
      
        'dataProvider' => $dataProvider,
        
        /**
         * Список колонок которые необходимо отобразить
         */
        'columns' => [
            /**
             * Столбец нумерации. Отображает порядковый номер строки
             */
            [
                'class' => \yii\grid\SerialColumn::class,
            ],
          
            'id',

            'name',
            

        ],
    ]
);
Последний раз редактировалось svil 2019.07.23, 18:01, всего редактировалось 1 раз.
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Как вывести в гриде массив через ArrayDataProvider

Сообщение masson »

Массив д.б.такой - https://www.yiiframework.com/doc/guide/ ... a-provider
$rows = $dataProvider->getModels(); //зачем это надо - не нашла
Значит не надо 8-)
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как вывести в гриде массив через ArrayDataProvider

Сообщение svil »

Попытка хоть что-то вытащить:

Код: Выделить всё

 $data ="categories.xml";
        if (is_object($data)) {
            $data = get_object_vars($data);
        }
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                $res = null;

                if (($key == '@attributes') && ($key)) {
                    $result = $res;
                } else {
                    $result[$key] = $res;
                }
            }
        } else {
            $result = $data;
        }


   json_encode($result);

Понимаю, что надо взять название элемента id name и их значение.
Но вот так ошибку выдает

Код: Выделить всё

$image = simplexml_load_file("categories.xml");

$sxe = new SimpleXMLElement($image); //здесь ошибка

echo $sxe->getName() ;
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как вывести в гриде массив через ArrayDataProvider

Сообщение svil »

Получаю тэги

Код: Выделить всё

$doc = new DOMDocument();

//$doc->loadXML( $yourXmlString ); // or:
$doc->load("categories.xml" );

$xpath = new DOMXpath( $doc );
$nodes = $xpath->query( '//*' );

$nodeNames = array();
foreach( $nodes as $node )
{
    $nodeNames[ $node->nodeName ] = $node->nodeName;
}

var_dump( $nodeNames );
Ответить