// 
//     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.
//

= PHPでのFlickrスライド・ショーのビルド
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: PHPでのFlickrスライド・ショーのビルド - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, PHPでのFlickrスライド・ショーのビルド

|===
|Justin Bolterが、Flickrにアクセスする単純なアプリケーションのビルドを通して、NetBeans IDE 6.9-7.0の新しいPHP機能を紹介しています。また、JavaScriptとCSSを使用して、Flickrイメージを単純なスライド・ショーに変換する方法も示しています。

このチュートリアルは、link:../intro-screencasts.html[+NetBeans IDE 6.9-7.0のガイド・ビデオ・ツアー+]の一部です。

作成者: Justin Bolter
時間: 14:00
link:http://bits.netbeans.org/media/NB65-flickrPHP-Screencast.flv[+ダウンロード+] (72MB)


*関連リンク*

* link:https://netbeans.org/kb/trails/php.html[+PHPの学習+]
* link:http://blogs.sun.com/netbeansphp/[+PHP向けのNetBeansブログ+]
* 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[+ご意見をお寄せください+]
 |   
|===
