2016-07-04 4 views
1

im using yii2 frameworkкак передать массив в gridview в yii2

У меня есть массив, идущий от контроллера к виду.

public function actionProducts() 
{ 
$product = Yii::$app->httpclient->get('http://localhost/MWSProducts/src/MarketplaceWebServiceProducts/Samples/GetMatchingProductSample.php'); 

     $array1 = str_replace("ns2:","",$product); 
     $array=json_decode(json_encode(simplexml_load_string($array1)),true);   

     return $this->render('products',['array'=>$array]); 
} 

В приведенном выше коде im преобразует xml в массив. $ массив имеет массив, и им передают его для просмотра под названием продукты. Теперь я хочу отобразить этот массив в представлении в Gridview, так как im new для yii2 im не смог этого сделать, он говорит, что мне нужно использовать некоторый dataprovider, но я не получаю, как это сделать.

Может ли кто-нибудь помочь мне в этом, как мне отобразить массив в gridview. Спасибо

Спасибо за ответ ..

На самом деле сво амазонка им массив продукт извлечения его из API продукта, мы не можем определить любые предопределить атрибуты, как идентификатор и все, так как его различны для каждого продукта. так выглядит массив.

Array 
    (
    [GetMatchingProductResult] => Array 
    (
     [0] => Array 
      (
       [@attributes] => Array 
        (
         [ASIN] => 0886467918 
         [status] => Success 
        ) 

       [Product] => Array 
        (
         [Identifiers] => Array 
          (
           [MarketplaceASIN] => Array 
            (
             [MarketplaceId] => A21TJRUUN4KGV 
             [ASIN] => 0886467918 
            ) 

          ) 

         [AttributeSets] => Array 
          (
           [ItemAttributes] => Array 
            (
             [Author] => Kipling, Rudyard 
             [Binding] => Hardcover 
             [Edition] => Har/Cas 
             [Format] => Import 
             [Label] => Imprint unknown 
             [Languages] => Array 
              (
               [Language] => Array 
                (
                 [0] => Array 
                  (
                   [Name] => english 
                   [Type] => Published 
                  ) 

                 [1] => Array 
                  (
                   [Name] => english 
                   [Type] => Original Language 
                  ) 

                 [2] => Array 
                  (
                   [Name] => english 
                   [Type] => Unknown 
                  ) 

                ) 

              ) 

             [Manufacturer] => Imprint unknown 
             [PackageDimensions] => Array 
              (
               [Weight] => 1.74 
              ) 

             [ProductGroup] => Book 
             [ProductTypeName] => ABIS_BOOK 
             [PublicationDate] => 1988-05-02 
             [Publisher] => Imprint unknown 
             [SmallImage] => Array 
              (
               [URL] => http://ecx.images-amazon.com/images/I/412CsE6Mb8L._SL75_.jpg 
               [Height] => 75 
               [Width] => 50 
              ) 

             [Studio] => Imprint unknown 
             [Title] => Jungle Book ("Read Along") 
            ) 

          ) 

         [Relationships] => Array 
          (
          ) 

         [SalesRankings] => Array 
          (
           [SalesRank] => Array 
            (
             [0] => Array 
              (
               [ProductCategoryId] => book_display_on_website 
               [Rank] => 709468 
              ) 

             [1] => Array 
              (
               [ProductCategoryId] => 1318084031 
               [Rank] => 14260 
              ) 

             [2] => Array 
              (
               [ProductCategoryId] => 1318083031 
               [Rank] => 47016 
              ) 

            ) 

          ) 

        ) 

      ) 

ответ

3

Если массив содержит данные, такие как dataProvider. Вы можете использовать arrayDataProvider http://www.yiiframework.com/doc-2.0/yii-data-arraydataprovider.html например (от yii2 гида):

$data = [ 
     ['id' => 1, 'name' => 'name 1', ...], 
     ['id' => 2, 'name' => 'name 2', ...], 
     ... 
     ['id' => 100, 'name' => 'name 100', ...], 
    ]; 

    $provider = new ArrayDataProvider([ 
     'allModels' => $data, 
     'pagination' => [ 
      'pageSize' => 10, 
     ], 
     'sort' => [ 
      'attributes' => ['id', 'name'], 
     ], 
    ]); 

краткое руководство по DataProvider http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html

в вашем случае

public function actionProducts() 
    { 
    $product = Yii::$app->httpclient->get('http://localhost/MWSProducts/src/MarketplaceWebServiceProducts/Samples/GetMatchingProductSample.php'); 

      $array1 = str_replace("ns2:","",$product); 
      $array=json_decode(json_encode(simplexml_load_string($array1)),true);   



      $provider = new ArrayDataProvider([ 
       'allModels' => $array, 
       'pagination' => [ 
        'pageSize' => 10, 
       ], 
      ]); 

      return $this->render('products',['array'=>$array]); 
    } 

Обратитесь к образцу выше, где массив $ data содержат id, name и предположим, что ваш массивDataProvider находится в массиве var $ и имеет идентификатор, имя тоже в gridview должно иметь

<?= GridView::widget([ 
    'dataProvider' => $array, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     'id', 
     'name', 
     ..... 

     ['class' => 'yii\grid\ActionColumn', 
     'contentOptions' => ['style' => 'width:84px; font-size:18px;']], 
    ], 
]); ?> 
+0

ОК, что я должен дать сейчас? –

+0

Я добавил предложение для griview – scaisEdge

+0

Да, я хочу, чтобы в виде сетки, что, если у нас нет идентификатора, имени в массиве? Потому что каждый массив будет иметь разные атрибуты. Затем, как я передаю это –

Смежные вопросы