phTagr językiem polskim
I’m pleased to announce that phTagr has now an Polish translation – many thanks to Bartosz Fenski (aka fEnIo) for his time. The fresh baked zip file could be downloaded from SourceForge.
I’m pleased to announce that phTagr has now an Polish translation – many thanks to Bartosz Fenski (aka fEnIo) for his time. The fresh baked zip file could be downloaded from SourceForge.
Recently a (German) news channel reported about the social micro payment system Flattr where you can share your love to thousand articles, songs, videos, or software by a simple click while having the opportunity to receive love from others. It’s a donation without troubles.
I think this payment-love sharing is a really really great idea! You can pay back your loved content sources or loved projects easily while receiving honors of others. All you need is an account at Flattr.com and some monthly donation input to give love and to receive love. If you love 10 things your monthly donation is shared to these 10 things, if you love 100, all 100 receive a little love – but at the end all you loved things receive something!
It’s a good idea for all the content creators, all song writers, all video editors, all software hobby writers like me. Therefore, you are able to tell your love for this great hobby project now! Just Flattr phTagr…
I’m happy to announce that phTagr has now an Estonian translation. Thanks to Craig for his great work who found also lots of missing translation texts. The fresh baked zip file could be downloaded from SourceForge. For upgrade information please have a look at our wiki page.
Further, phTagr supports now the media selection by the upload folder. This feature is very useful for albums which are ordered by folder. The folder link could be found by media detail tab in the media view.
Finally, the code of the open source social web gallery phTagr has now an API page available at http://api.phtagr.org. The API is extracted from source using the API generator plugin for CakePHP which makes the documentation pretty easy. Futher the plugin provides a nice web interface for all classes.
The phTagr API contains the API of cakePHP and the API of phTagr classes. So if you need a code documentation of a class, controller, view, component, helper, theme, etc have a look at api.phtagr.org, make use of the search function, and get things quicker done.
This post shows how easy your CakePHP applications becomes mobile device aware by using CakePHP theming feature. At the end of this post the mobile theme is selected automatically on requests of mobile devices.
Theming in CakePHP is really a piece of cake! Since CakePHP is a Model-View-Control framework, the data, the data logic and the view is well separated. For theming you just need to replace your view templates without changing the logic or data handling. Theming is quite easy and you don’t need to be a professional software programmer. While a nice theme needs some knowledge of HTML and CSS theming CakePHP requires just basic PHP skills.
In standard cases all view templates are located in ./app/views and CakePHP selects by its magic the correct page layout and the view for the current logic. So you have your layouts (the basic document structure) in ./app/views/layouts and your view templates (the specific view of one action) of your current action in ./app/views/[controller]/[action].ctp. For detailed information please have a look at http://book.cakephp.org/de/view/94/Views.
The CSS and JS files have a little different place. The style sheets are located in ./app/webroot/css and the javascript files are located in ./app/webroot/js.
The important structure of CakePHP’s view templates is shown below:
./app/views/
views/
layouts/ <-- Location of page layouts
default.ctp
helpers/ <-- View template helpers
elements/ <-- Little view templates
home/
index.ctp <-- Specific view template of the index action in the home controller
explorer/
index.ctp
...
/themed <-- Directory of CakePHP themes
webroot/ <-- Application's webroot (like htdocs for apache)
css/ <-- Style sheets
js/ <-- Javascript directory
Now the cool part: You can theme all your views with a very similar view structure. But you don’t have to theme all layouts and views. If your theme does not have a required view CakePHP uses the original one. So you can just theme required layouts and/or views.
Now we want to create a mobile version of our application. As example application I use the open source social photo gallery phTagr from www.phtagr.org. I assume that your phTagr gallery is installed and accessible at http://localhost/phtagr. But you can easily adapt these steps to any other CakePHP application.
First we need to create a theme folder with its basic theme structure. Goto theme directory ./app/views/themed and create your own theme, I call it “mobile”. Further some required directories are also required. We theme the default layout and some basic actions, for phTagr it is the home, the photo explorer and the image view.
cd app/views/ mkdir -d themed/mobile cd themed/mobile mkdir -p layouts elements webroot/css home explorer images
Now we have following folder structure
./app/views/themed
/mobile
layouts/ <-- Default theme layouts
elements/ <-- Folder for element templates
webroot/
css/ <-- Folder for mobile CSS
home/ <-- Your themed views of home controller
explorer/ <-- Your themed views of explorer controller
images/ <-- Your themed views of images controller
Note: ./app/views/themed/mobile is now referred as ./mobile.
To activate the new theme you set it in before_render() at ./app/app_controller.php. Later we automate this theme selection but for now the hard coded version is just fine. Important is, that the views are theme aware by this->view = 'Theme'; and of cause your theme name.
function beforeRender() {
// ... other code
$this->view = "Theme";
$this->theme = "mobile";
}
If we call now our side http://localhost/phtagr nothing is changed. Thats fine, than CakePHP did not find any themed layouts or views to use and uses the standard one. Therefore we want to change the default layout in ./mobile/layouts/default.ctp to see some differences.
Edit ./mobile/layouts/default.ctp
<?php echo $html->docType('xhtml-strict'); ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $title_for_layout; ?></title>
<?php
echo $html->charset('UTF-8');
echo $html->meta('icon');
?>
</head>
<body>
<?php echo $content_for_layout; ?>
</body>
</html>
Now we see some changes http://localhost/phtagr with a plain layout.
My profession is not quite a web designer but here I show you howto style your mobile version.
You create your css in ./mobile/webroot/css/mobile.css and add it to your default theme in the <head> section.
...
<?php
echo $html->charset('UTF-8');
echo $html->meta('icon');
echo $html->css('mobile');
?>
...
* {
margin: 0;
padding: 0;
}
body {
width: 100%;
color: black;
font-family: Druid, Verdana, Sans;
font-size: 10pt;
background: white;
}
h1,h2,h3 { font-weight: bold; }
h1 { font-size: 130%; }
h2 { font-size: 120%; }
h3 { font-size: 110%; }
a { text-decoration: none; }
a img { border: 1px black solid; }
Now we want to add some containers for header and footer. These parts could be rendered in special containers, CakePHP calls them elements template. Header and footer are perfect candidates for such elements.
Adapt your default HTML body layout in ./mobile/layouts/default.ctp
<body>
<div><?php echo View::element('header'); ?></div>
<div><?php echo $content_for_layout; ?></div>
<div><?php echo View::element('header'); ?></div>
</body>
Now create the elements ./mobile/elements/header.ctp and ./mobile/elements/footer.ctp.
header.ctp:
<h1>phTagr<span>mobile</span></h1>
footer.ctp:
<p>Social Web Gallery <a href="http://www.phtagr.org">phTagr</a> - mobile version.</p>
And we add new styles to ./mobile/webroot/css/mobile.css:
.header * {
display: inline;
}
.header {
display: block;
background: #3d3;
padding: 2px 5px;
}
.header h1 span.subheader {
color: white;
font-size: 80%;
font-style: italic;
}
.footer {
display: block;
background: #888;
}
Now some views will be adapted from the original ones. The original versions are located in ./app/views/[controller]/. In the theme they are located in ./app/themed/[theme]/[controller], in ./mobile/[controller].
For a theme view of the index action of the home controller CakePHP will look first in ./mobile/home/index.ctp. If it does not exists CakePHP take the standard one. So I copied the original version index.php to the theme folder ./mobile/home and made some changes.
Further I copied and adapt ./app/views/explorer/index.ctp and ./app/views/images/index.ctp. All other themes are not very important to adapt. The same with the view action of images controller.
For the forms I added some basic form style definitions to ./mobile/webroot/css/mobile.css:
fieldset {
margin: 5pt;
border: none;
}
fieldset legend {
font-weight: bold;
}
fieldset div label {
display: block;
width: 100%;
}
fieldset div input[type=textfield],
fieldset div input[type=text] {
width: 100%;
font-size: 150%;
}
input[type=checkbox] + label {
display: inline;
}
form * input[type=submit] {
font-size: 150%;
border: 2px solid black;
background: #3d3;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
}
And styled the flag message:
.message {
display: block;
font-size: 120%;
margin: 5pt;
padding: 5pt;
border: 1px solid black;
background: #fd3;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
}
The iPhone (and iPod Touch) requires a special viewport meta information to render without any scaling. This is added to the default layout in the head section:
<title><?php echo $title_for_layout; ?></title> <meta name="viewport" content="initial-scale=1.0"> ...
After adjusting the views and improving the style sheets the automatic theme switch is build in. For this we need the RequestHandler component in our basic app_controller.php which is added to the $components variable:
var $components = array('RequestHandler');
We use the isMobile() function of RequestHandler component to evaluate the client device type and select the mobile theme for mobile devices
function beforeRender() {
// ... other code
if ($this->RequestHandler->isMobile()) {
$this->view = "Theme";
$this->theme = "mobile";
}
}
The theme feature of CakePHP is straight forward and easy to use. You can customize your CakePHP application easily by changing the page layout or partial theming by writing single view templates of specific controller actions. The example showed how easy your application becomes mobile device aware.
You can see the full mobile theme of phTagr at http://trac.phtagr.org/browser/trunk/views/themed/mobile.
2.1.1 phTagr is released! It has a simplified upload function which is enabled by default and replaces the advance file browser. Users have now an upload menu entry where uploaded files are stored in a daily upload directory. ZIP archives are extracted automatically. Uploaded and extracted files are imported and are shown immediately. Therefore, users can upload their media within three clicks and the upload form has now five upload field instead of one.
The next big improvement is the quick search which covers sub word. The quick search of ‘ice‘ returns also media with tags of ‘slice‘ or ‘rice‘.
phTagr is build on top of the MVC framework CakePHP and uses now CakePHP 1.3 instead of CakePHP 1.2. You have to upgrade your CakePHP if you use SVN trunk. See How To Migrate Phtagr for more details.
An admin user can now see the access level of other users and can change these. This feature was requested to handle private or malicious media.
phTagr supports now Dutch as new language – Thanks to Remy Wetzels. See also How To Translate.
Following Tickets where closed since 2.1.1
Recently the upload function of phTagr was simplified and is enabled as default by now. The older but more advanced file browser could be enabled in the general settings of the user.
By the default the user has an upload button in the menu where he can upload files and ZIP archives. These files are uploaded to a daily created upload directory and are imported automatically. After the successful upload process some of the new imported photos or videos are shown directly in the upload form and gives a great feedback to the user.
This awesome improvement simplifies the technical modeled behavior of the file browser where two separate steps of uploading and importing are necessary to show your media in the gallery. Now new photos could be uploaded and shown in the gallery with only three simple clicks.
Have fun while using phTagr!
I’m very happy to announce that phTagr speaks now Dutch, which was contributed from Remy Wetzels. It’s the first language contribution from the community. Thank you very much! I’m very pleased. The updated version could be downloaded from SourceForge.net.
If your language is missing, please read the instructions on the wiki.
You can subscribe at https://lists.sourceforge.net/lists/listinfo/phtagr-gallery for open discussions, help requests or feature requests.
I’m happy to announce phTagr 2.1.1 which simplifies the setup and adds multi-language support. As first language German was submitted. You can submit your language to translation [AT] phtagr.org. See How To Translate for further information.
Further, the geo tagging was improved and some minor bugs were fixed.
You can download it from SourceForge (ca. 2.9 MB). Please do not hesitate to report any success story, bugs or feature request. See How To Help for further details.
Following Tickets where solved since 2.1
Setup and Requirements:
Explorer: Geotagging
General: