// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Construindo uma apresentação de slides do Flickr com o PHP
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Construindo uma apresentação de slides do Flickr com o PHP - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Construindo uma apresentação de slides do Flickr com o PHP

|===
|Justin Bolter mostra as novas funcionalidades PHP do NetBeans IDE 6.9-7.0 ensinando a construir uma aplicação simples para acessar o Flickr. Você verá então como transformar as suas imagens do Flickr em uma apresentação de slides simples usando o JavaScript e o CSS.

Este tutorial faz parte do link:../intro-screencasts.html[+Tour em Vídeo Guiado do NetBeans IDE 6.9-7.0+].

Autor: Justin Bolter
Tempo: 14:00 
link:http://bits.netbeans.org/media/NB65-flickrPHP-Screencast.flv[+Download+] [72MB]


*Links relacionados*

* link:https://netbeans.org/kb/trails/php.html[+A Trilha de Aprendizado do PHP+]
* link:http://blogs.sun.com/netbeansphp/[+Weblog sobre NetBeans para PHP+]
* link:http://phpflickr.com/[+PHPFlickr+]
* link:http://jquery.com/[+jQuery+]

link:/about/contact_form.html?to=3&subject=Feedback:%20PHP+Flickr%20in%20NB6.5%20screencast[+Envie-nos Seu Feedback+]
 |   
|===
