Weird problem → google picasa feed & nette.ajax
- Václav Novotný
- Member | 13
Hi,
I want to load photos from google picasa albums via XML feed. I load data from
all public photos from one user and then I want display only albums related
with viewing content. At some pages/views, it works well, but I have problem
with one case, where i get error 500 - Internal Server Error
, and
I cannot solve it for quite couple of hours now.
Strangely, when I write test code outside of nette, without using of ajax etc., just the pure PHP processing mechanism, it works good. Unluckily, I'm begginer, so I dont have much experience with debuging tools and now I even have no clue, where might be the problem. So any advice is welcome.
I'll put here my problematic code (only problematic part) as is
,
even with link to user albums. It contains pictures of some glass products etc.
== no sensitive data.
PRESENTER
public function renderDefault()
{
//default value for language
if ($this->lang === NULL)
$this->lang = 'en';
//default values for picasa image size
if ($this->thumb_size === NULL)
$this->thumb_size = 150;
if ($this->full_size === NULL)
$this->full_size = 720;
//set tab content or dump array, if all tabs are closed (if handleTabs never triggers)
if ($this->tab === NULL) {
$tab = array('id' => 0, 'text' => '');
$images = false;
} else {
//get content from database
$tab = $this->database->table('tabs')->get($this->tab);
//get album IDs to this tab content from database
$albums = json_decode($tab['albumID']);
//load XML from google picasa, containing album IDs, photo titles and photos src
$userId = '102879954808276235711';
$images = simplexml_load_file('http://picasaweb.google.com/data/feed/base/user/'
.$userId
.'?kind=photo&fields=entry(id,title,content/@src)');
$images = $images->entry;
for ($i = count($images) - 1; $i >= 0; $i--) {
//shorten full path to album to just 19 digit album ID number
$images[$i]->id = substr($images[$i]->id, strpos($images[$i]->id, 'albumid/') + 8, 19);
//unset photos from albums, that we dont want to display
if (array_search($images[$i]->id, $albums) === false)
unset($images[$i]);
}
$images = (empty($images)) ? false : $images;
}
$this->template->tabContent = $tab;
$this->template->images = $images;
$this->template->tsize = $this->thumb_size;
$this->template->fsize = $this->full_size;
}
TEMPLATE
{block #content}
<div id="tabContainer">
{snippet tabContent}
<ul id="tabs">
{foreach $tabs as $tab}
<li class="tab{if ($tab['id'] === $tabContent['id'])} active{/if}" id="tab_{$tab['id']}">
<a href="{link tabs!, $tab['id']}" class="ajax">
{$tab['title']}
</a>
</li>
{/foreach}
</ul>
<div id="tabContent">
{!$tabContent['text']}
<div n:if="$images" id="gallery">
<img n:foreach="$images as $image"
src="{$image->content->attributes()->src|crop:$tsize}" <!--custom helper sets size and crop image to square-->
alt="{$image->title}"
/>
</div>
</div>
{/snippet}
</div>
{/block}
For dynamic loading of tab content I use jQuery 1.9.1 and nette.ajax 1.2.2. When I load tab with images from other albums, than (albumID: 5927213289295143921), it works, so I have problems with this one album, but, if i rewrite processing mechanism into single PHP file, it runs without problem, you can try it with this code:
<?php
$albumID = '["5927213289295143921","5927488241704544625","5927486244080166977"]';
$albums = json_decode($albumID);
$userId = '102879954808276235711';
$images = simplexml_load_file('http://picasaweb.google.com/data/feed/base/user/'
.$userId
.'?kind=photo&fields=entry(id,title,content/@src)');
$images = $images->entry;
for ($i = count($images) - 1; $i >= 0; $i--) {
//shorten full path to album ID/photo to just 19 digit album ID number
$images[$i]->id = substr($images[$i]->id, strpos($images[$i]->id, 'albumid/') + 8, 19);
//unset photos from albums, that we dont need to load
if (array_search($images[$i]->id, $albums) === false)
unset($images[$i]);
}
print_r($images);
echo '<br />';
foreach ($images as $image) {
echo '<img';
echo ' src="' . $image->content->attributes()->src . '"';
echo ' alt="' . $image->title . '"';
echo ' />';
}
Do you have suspicion, what could cause that
error 500: internal server error
? Because I'm out of bullets.
Thanks in advance
Last edited by Václav Novotný (2013-10-02 17:15)
- Václav Novotný
- Member | 13
Wow, so laděnka works like in production mode when ajax call is triggered.
That's cool! I looked in log folder (that didn't cross my mind before) and
I found that problem was in custom helper in combination with czech
filename – I used preg_match and metacharacter \w
for all
‘word characters’, but this metacharacter is english only, so id didn't
match czech word. No it's solved. Thank YOU!