簡體   English   中英

使用shopify的API和PHP獲取shopify商店中的所有產品,然后回顯到“list-products.php”頁面

[英]Fetch all products on shopify store using shopify's API & PHP, then echo to a “list-products.php” page

我最近開始開發並希望得到一些幫助,如果可能的話,我將面臨以下問題。 首先,我的目標[項目范圍]是做以下事情:

 1. Connect to the shopify API via an external web app [Done this Successfully]
 2. Fetch a list of all products in that specific store [Struggling with this]
 3. Insert (or update there after) in to a MySQL database [Can do this successfully]

目前我可以根據shopify的每次通話250個產品的API限制來獲取並回應這一點。 我做了一些研究,發現我需要在商店中對產品的總體數量[5000個產品/每頁250個產品= 20個頁面]進行分頁。 從那以后我可以遍歷每一頁並回顯所有產品。 然而,當我運行這個循環時,我得到的前250個產品反復出現在商店中的產品總數(道歉,如果措辭看起來有點模糊,因為我對API和PHP都是全新的)。

我的問題是:我如何循環並回顯所有產品和所有頁面,並回顯到我創建的頁面“list-products.php”?

我目前的代碼如下:

get-products.php //連接到shopify api。

<?php
session_start();
$username = $_SESSION['username'];
if(empty($_SESSION['username']))
{
    header("Location: loginpage.php");
    die("Redirecting to login.php");
}
$api_url = 'https://apikey:password@store.myshopify.com';
$products_obj_url = $api_url . '/admin/products.json?limit=250&page='.($i+1);
$products_content = @file_get_contents( $products_obj_url );
$products_json = json_decode( $products_content, true );
$products = $products_json['products'];
?>

get-product-count.php //計算當前商店中列出的產品數量。

<?php
 session_start();
 $username = $_SESSION['username'];
if(empty($_SESSION['username']))
{
    header("Location: loginpage.php");
    die("Redirecting to login.php");
}
 $api_url = 'https://apikey:password@store.myshopify.com';
 $count_obj_url = $api_url . '/admin/products/count.json';
 $count_content = @file_get_contents( $count_obj_url );
 $count_json = json_decode( $count_content, true );
 $count = $count_json['count'];
?>

list-products.php //回顯商店中所有產品的清單

<!DOCTYPE html>

 <?php
  include('../get-products.php'); 
  include('../get-product-count.php'); 
?>

<html>
<head>
  <title>List Products</title>
  <link rel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.40/css/uikit.min.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.40/js/uikit.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.40/js/uikit-icons.min.js"></script>
</head>

<body>
 <?php include('../header.php'); ?>

  <div class="uk-alert-success uk-margin-medium-left uk-margin-medium-right" uk-alert>
  <a class="uk-alert-close" uk-close></a>

  <p>All products.</p>
  <table class="uk-table uk-table-small uk-table-striped uk-table-divider uk-margin-small uk-margin-small-left uk-text-small" uk-grid="">

<tr>
    <td>Product ID</td>
    <td>Product Title</td>
    <td>Product SKU</td>
    <td>Variant Title</td>
    <td>Price</td>
    <td>Inventory</td>
</tr>
<?php

// Loop through each page and pull all products. Reason being, Shopify API call limit is 250 calls at once.
// This currently display the first 250 products on the first page for the full product count.

$i = 0;
$pages = ceil($count/250); // Count products / 250 from get-products.php = to amount of pages rounded up.

    for($i = 0; $i < $pages; $i++){
        foreach($products as $product){   
            echo "<tr>
            <td>". $product['variants'][0]['product_id'] . "</td>
            <td>". $product['title']. "</td>
            <td>". $product['variants'][0]['title'] . "</td>
            <td>". $product['variants'][0]['sku'] . "</td>
            <td>". $product['variants'][0]['price'] . "</td>
            <td>". $product['variants'][0]['old_inventory_quantity'] . "</td>
            </tr>";
        } 
    }
?>   
</table>

<?php include('../footer.php'); ?>

</body>
</html>

最后:對此的任何幫助將不勝感激。

你很近。

您需要繼續在循環中獲取下一個250個產品:

for($i = 0; $i < $pages; $i++){

    // not sure if this exact example will work 100% for you but you need to re-execute the code from this file on every iteration
    // By placing this here, get-products.php will become aware of the incrementing $i and fetch the next page of products
    require( '../get-products.php' );

    foreach($products as $product){   
        echo "<tr>
        <td>". $product['variants'][0]['product_id'] . "</td>
        <td>". $product['title']. "</td>
        <td>". $product['variants'][0]['title'] . "</td>
        <td>". $product['variants'][0]['sku'] . "</td>
        <td>". $product['variants'][0]['price'] . "</td>
        <td>". $product['variants'][0]['old_inventory_quantity'] . "</td>
        </tr>";
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM