【问题标题】:How to parsing string of shopify pagination link according new pagination update?如何根据新的分页更新解析shopify分页链接的字符串?
【发布时间】:2019-09-17 10:22:55
【问题描述】:

我有一个包含上一页链接和下一页链接的字符串:

Link: "<https://{shop}.myshopify.com/admin/api/{version}/products.json?page_info={next_page_info}&limit={limit}>; rel={next}, <https://{shop}.myshopify.com/admin/api/{version}/products.json?page_info={prev_page_info}&limit={limit}>; rel={previous}"

期待输出

array(
    'next' => {next_page_info},
    'prev' => {prev_page_info}
);

链接字符串也有如下条件:

  1. 字符串同时包含下一个和上一个链接

  2. 字符串只有下一个链接 输出应该是array('next' => '{next_page_info}' );

  3. 字符串只有 prev 链接输出应该是 array('prev' => '{prev_page_info}');

【问题讨论】:

  • @04FS 我不知道如何解析这种字符串,这就是我问的原因......
  • 那么你应该开始熟悉正则表达式了。

标签: php shopify shopify-app


【解决方案1】:

为所有类型的 URL 返回 page_info。

public function parsePaginationLinkHeader ($headerLink) 
{

    $available_links = [];
    $links = explode(',', $headerLink);
    foreach ($links as $link){

        if (preg_match('/<(.*)>;\srel=\\"(.*)\\"/', $link, $matches)) {

            $query_str = parse_url($matches[1], PHP_URL_QUERY);
            parse_str($query_str, $query_params);
            $available_links[$matches[2]] = $query_params['page_info'];
        }
    }

    return $available_links;
}

响应转储

array(2) {
["previous"]=>
string(143) "eyJwdWJsaXNoZWRfc3RhdHVzIjoicHVibGlzaGVkIiwiZGlyZWN0aW9uIjoicHJldiIsImxhc3RfaWQiOjM3NDc0NDA1NTgxNjQsImxhc3RfdmFsdWUiOiJhbHBoYWJldCB0LXNoaXJ0In0"
["next"]=>
string(188) "eyJwdWJsaXNoZWRfc3RhdHVzIjoicHVibGlzaGVkIiwiZGlyZWN0aW9uIjoibmV4dCIsImxhc3RfaWQiOjE1MjAyMzAzMzQ1NDgsImxhc3RfdmFsdWUiOiJBc3ltbWV0cmljIEhpZ2ggV2Fpc3QgU2hvcnQgU2xlZXZlIFJlZCBQYXJ0eSBEcmVzcyJ9"
}

【讨论】:

    【解决方案2】:

    你可以试试我写的这个功能,只需将链接文本或整个标题信息发送给它

     private function render_links($Link)
        {
            $combined_links = [];
            $links = explode(',', $Link);
            foreach ($links as $link){
                if (preg_match('#<(http(?:s)?:\/\/.*\.myshopify.com\/.*products.json\?.*)>;.*rel=\\"(.*)\\"#', $link, $matches)) {
                    $combined_links[$matches[2]] = $matches[1];
                }
            }
    
            return $combined_links;
    
        }
    

    它将像这样的链接作为数组返回

    "previous":"limit=1&fields=id%2Cimages&page_info=eyJkaXJlY3Rpb24iOiJwcmV2IiwibGFzdF9pZCI6NDA5OTUyMjM5NjE5NSwibGFzdF92YWx1ZSI6InNmc2Rmc2YifQ",
    "next":"limit=1&fields=id%2Cimages&page_info=eyJkaXJlY3Rpb24iOiJuZXh0IiwibGFzdF9pZCI6NDA5OTUyMjM5NjE5NSwibGFzdF92YWx1ZSI6InNmc2Rmc2YifQ"
    

    【讨论】:

    • 在我的例子中是 ?总是不同的。不过,感谢您的努力
    猜你喜欢
    • 2014-08-25
    • 2019-06-04
    • 2014-06-05
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多