2016-01-13 53 views
0

我已經做了一個模塊,顯示從instagram配置文件中的最新圖像,它完美的Joomla 3.4.8與一個小的彈出式庫 我想添加個人資料圖像 - profile_picture,但它當然應該只出現一次。 我曾嘗試過各種PHP的回聲 - 但沒有運氣如何從一個json文件只回聲一個職位

誰能幫助?

的PHP

<?php 
    // Supply a user id and an access token 
    $userid = $params->get('klintweb_insta_id'); 
    $accessToken = $params->get('klintweb_insta_access_token'); 
    $count = $params->get('klintweb_insta_count'); 

    // Gets post and image 
    function fetchData($url){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
     $result = curl_exec($ch); 
     curl_close($ch); 
     return $result; 
    } 

    // Pulls and parses data. 
    $result = fetchData("https://api.instagram.com/v1/users/{$userid}/media/recent/?count={$count}&access_token={$accessToken}"); 
    $result = json_decode($result); 


?> 

在foreach

<?php foreach ($result->data as $post): ?> 
    {emailcloak=off} 
    <!-- Renders images. @Options (thumbnail,low_resoulution, high_resolution) --> 
    <span class="KlintWebInstaSpan"> 
     <a data-mediabox-group="insta" type="image/jpeg" class="jcepopup noicon" data-mediabox-caption="<?= rtrim(strip_tags(substr ($post->caption->text,0,140))).'...'; ?>" data-mediabox-title="rasmusjorgensen128" href="<?= $post->images->standard_resolution->url ?>"> 
      <img src="<?= $post->images->thumbnail->url ?>" alt="Billede fra instagram" /> 
      <span class="overlay"></span> 
     </a> 
    </span> 
<?php endforeach ?> 

的jsonfile

{ 
"data": [{ 
    "comments": { 
     "count": 0 
    }, 
    "caption": { 
     "created_time": "1296710352", 
     "text": "Inside le truC#foodtruck", 
     "from": { 
      "username": "kevin", 
      "full_name": "Kevin Systrom", 
      "type": "user", 
      "id": "3" 
     }, 
     "id": "26621408" 
    }, 
    "likes": { 
     "count": 15 
    }, 
    "link": "http://instagr.am/p/BWrVZ/", 
    "user": { 
     "username": "kevin", 
     "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_3_75sq_1295574122.jpg", 
     "id": "3" 
    }, 
    "created_time": "1296710327", 
    "images": { 
     "low_resolution": { 
      "url": "http://distillery.s3.amazonaws.com/media/2011/02/02/6ea7baea55774c5e81e7e3e1f6e791a7_6.jpg", 
      "width": 306, 
      "height": 306 
     }, 
     "thumbnail": { 
      "url": "http://distillery.s3.amazonaws.com/media/2011/02/02/6ea7baea55774c5e81e7e3e1f6e791a7_5.jpg", 
      "width": 150, 
      "height": 150 
     }, 
     "standard_resolution": { 
      "url": "http://distillery.s3.amazonaws.com/media/2011/02/02/6ea7baea55774c5e81e7e3e1f6e791a7_7.jpg", 
      "width": 612, 
      "height": 612 
     } 
    }, 
    "type": "image", 
    "users_in_photo": [], 
    "filter": "Earlybird", 
    "tags": ["foodtruck"], 
    "id": "22721881", 
    "location": { 
     "latitude": 37.778720183610183, 
     "longitude": -122.3962783813477, 
     "id": "520640", 
     "street_address": "", 
     "name": "Le Truc" 
    } 
}, 
{ 
    "videos": { 
     "low_resolution": { 
      "url": "http://distilleryvesper9-13.ak.instagram.com/090d06dad9cd11e2aa0912313817975d_102.mp4", 
      "width": 480, 
      "height": 480 
     }, 
     "standard_resolution": { 
      "url": "http://distilleryvesper9-13.ak.instagram.com/090d06dad9cd11e2aa0912313817975d_101.mp4", 
      "width": 640, 
      "height": 640 
     }, 
    "comments": { 
     "count": 2 
    }, 
    "caption": null, 
    "likes": { 
     "count": 1 
    }, 
    "link": "http://instagr.am/p/D/", 
    "created_time": "1279340983", 
    "images": { 
     "low_resolution": { 
      "url": "http://distilleryimage2.ak.instagram.com/11f75f1cd9cc11e2a0fd22000aa8039a_6.jpg", 
      "width": 306, 
      "height": 306 
     }, 
     "thumbnail": { 
      "url": "http://distilleryimage2.ak.instagram.com/11f75f1cd9cc11e2a0fd22000aa8039a_5.jpg", 
      "width": 150, 
      "height": 150 
     }, 
     "standard_resolution": { 
      "url": "http://distilleryimage2.ak.instagram.com/11f75f1cd9cc11e2a0fd22000aa8039a_7.jpg", 
      "width": 612, 
      "height": 612 
     } 
    }, 
    "type": "video", 
    "users_in_photo": null, 
    "filter": "Vesper", 
    "tags": [], 
    "id": "363839373298", 
    "user": { 
     "username": "kevin", 
     "full_name": "Kevin S", 
     "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_3_75sq_1295574122.jpg", 
     "id": "3" 
    }, 
    "location": null 
}, 

] }

由於亞當·泰勒 你指出它是如何簡單可以做到

也感謝Danoweb幫助

+0

正如你可以看到有URL中的「計數」。如果例如數爲4,畫廊顯示,從最新的4個帖子 我想顯示「profile_picture」一旦4個縮略圖 – KlintWeb

回答

1

我說得對理解你通過照片列表循環,你想也獲得資料圖片並打印一次?

你通過所有的照片需要循環?如果沒有,您可以在打印照片後添加break以退出循環。

如果您通過照片需要循環爲好,爲什麼不能訪問的第一個元素在JSON,通過照片的其餘部分採取資料圖片從那裏,然後循環?

編輯: 關於您的解決方案,直接訪問第一張照片,打印關聯的用戶縮略圖,然後繼續循環打印所有照片可能更容易。喜歡的東西:

<div class="user"> 
    <?php $post = $result->data[0]; ?> 
    <img src="<?= $post->user->profile_picture ?>" alt="<?= $post->user->username ?>" /> 
    <span class="username"><?= $post->user->username ?></span> 
</div> 

<!-- do the rest of your looping/displaying photos --> 

在您的解決方案,你在陣列切片一個元素,然後在陣列上循環,當你真正想要做的是訪問的第一個元素。

+0

以上正如你可以看到有URL中的「數」的縮略圖。如果我將例如設置爲4,畫廊將在他的instagram網站上的四個最新帖子中以分隔符顯示大拇指。我想在畫廊上方顯示一次個人資料照片。你的建議聽起來很對 - 但我該怎麼做? – KlintWeb

+0

我已經添加了一個示例並對您的解決方案進行了評論。 –

0

從我的理解,它看起來像被JSON響應中提供兩倍的資料圖片。我將使用的是一個變量來跟蹤我是否已經顯示了個人資料圖片,如果是,則不顯示第二個。例如:

<?php 
$shown_profile = false; 
foreach ($result->data as $post) 
{ 
    //WE HAVE NOT SHOWN PROFILE PIC, SHOW IT AND SET FLAG. 
    if($shown_profile == false and (image is profile pic)) 
    { 
     $shown_profile = true; 
    } 

    //WE HAVE ALREADY SHOWN PROFILE PIC AND THIS IMAGE IS A DUPLICATE 
    if($shown_profile == true and (image is profile pic)) 
    { 
     //JUMP TO THE NEXT LOOP INTERATION 
     continue; 
    } 
    //[THE REST OF YOUR FOREACH CODE] 
} 

?> 

你可以找到更多信息有關 「繼續」 在這裏的講話:
http://php.net/manual/en/control-structures.continue.php

希望這有助於!

+0

我明白你的意思,而且看起來相當正確。 但不幸的是我無法弄清楚值 - 例如哪裏是profile_picture? 你願意多寫點小細節 – KlintWeb

+0

哦!我現在看到,所以你可以做的是接受這個JSON數據(文件讀取或者你得到它),然後傳遞給:'json_decode(data);'這會給你一個PHP數組。然後你可以'print_r(array);'查看json的輸出(以及它的各種尺寸!)。因此,如果您創建了'$ json_data_array = json_decode(data);',我想您可以使用:$ json_data_array ['data'] ['user'] ['profile_picture']'獲取JSON中的URL關於如何訪問JSON,您可能不需要最初的['data']維度。希望這有助於您! – Danoweb