Google Dart … the new Google Buzz??
Google recently announced Google Dart, a new programming language intended as both a server- and client-side language that offers greater efficiency and better syntax and structure than JavaScript. Many folks believe it’s meant to replace JavaScript.
My initial reaction to the news: horror. OK, not quite, though the thought of JavaScript going into early retirement was a funny one. I don’t see that happening any time soon. I do recall Google Buzz and what a fiasco that was, though I badly *wanted* to like it. It was officially terminated / retired December 15th. Now of course there’s Google+, which seems to be gaining momentum. With Microsoft and other major players already poo-pooing Dart, it’s starting to look like another Buzz situation though for different reasons (Buzz suffered from concerns about its privacy settings. Perhaps Dart will return in another incarnation. To follow in the same trend as Google+ may I suggest something like Google♥ or Google→? The second doesn’t quite look like a dart, and the first might get confused for “Google Love” rather than “Google Heart” … but the name they pick(ed) is the least of their worries with this new undertaking IMHO.
Check out some of the discussion over at SitePoint.
Drupal Site for a Northern Virginia / Washington, DC Economic Organization
Drupal site for a Northern Virginia / Washington DC Economic Organization: http://t.co/USPUonJm
We maintain a large Drupal 6 site for a northern Virginia county government. This particular client is a county government organization and as such we cannot disclose their name on our site. Please contact us so that we can share additional details.
- Client: Withheld at client request
- Link: URL wittheld
- Location: Northern Virginia
new site: USAID-funded Non-profit for Washington DC aid agency
New Drupal 7 site fort USAID-funded non-profit in Washington, DC: http://t.co/t8kMPWZQ.
We built a site for a public health non-profit called using Drupal 7. It is set up using the Drupal content management system so that staff can manage the site on their own. It features integrated blog RSS feeds from four separate external blogs. It also features integrated maps of projects, using a Drupal integration of the Google Maps API. The project is funded by USAID and is managed by FHI 360, CARE and Winrock International.
Name and link withheld due to client confidentiality. Please contact us to find out more about this project.
PayPal Payment Module (Joomla 1.5-1.7)
Simple configurable payment module
There are tons of commercial PayPal extensions available, but what if you just want to show a simple payment form that lets customers set the price, add a description and enter their name? This module does just that. Just install it, create a module and select “PayPal Payment”, then configure it as needed and assign it to a module position and menu item(s). You can also configure a return URL and “payment canceled” URL.
This has only been tested on Joomla 1.5 right now but may work fine on Joomla 1.6/1.7. ….. Updated so it now works on Joomla 1.6 and 1.7. OK, I only tested in on 1.7 but they are basically the same thing, and you should be using 1.7 anyway.
We created this module for DC Internationals, a language institute located in Washington, D.C. Check it out.
Each language has its own page and its own customized payment form. This was done by simply copying the module and assigning it to the various pages .. one per page.
new site: Mineralogical Society of Washington, DC
new site: Mineralogical Society of Washington, D.C.: http://t.co/hJanamio
Founded in 1942, MSDC meets monthly at the Smithsonian Museum of Natural History, on the national Mall in Washington, DC. Members range from total novices to true experts. We redesigned their site using Joomla, so the society can now edit their pages more easily.
Drupal 8 Roadmap
Drupal 8 has been in the works for some time now, and looks pretty exciting. We’re particularly excited about web services becoming part of Drupal core, rather than being something you can add on. We have built custom web services applications for Joomla & SouthWare e-commerce sites, but would love to be able to do that more easily in Drupal too.
Drupal 7.10 Released
Drupal 7.10 Released http://t.co/yCLyyGbs
Drupal 7.10, a maintenance release with numerous bug fixes (no security fixes) is now available for download. Several major bugs, including one causing errors with the 5.x branch of Drush, have been fixed this release. See the Drupal 7.10 release notes for a full listing.
Read more: http://drupal.org/drupal-7.10
Get ready for Joomla 2.5!
Joomla 2.5 (formerly codenamed 1.8) is coming out any day now, short on the heels of winning 2011′s Packt CMS award.
This is the next major release in the series, which started with 1.0 in the Mambo days, progressed to the now very stable 1.5, and on to 1.6/1.7, which were intended as a stepping stone to 2.5. We have seen conflicting reports of an early January or late December release date. Either way, there will be a period of months in which Joomla users plan their migration to 2.5. If you are not using too many extensions you could probably migrate fairly painlessly (a migration tool is reportedly in the works).
Emerald Education Systems – Drupal Site
Emerald Education Systems http://t.co/HvQQjplW - low vision rehabilitation site using Drupal 6 for a customer in Baltimore, Maryland. Integrated with online courses. Site also integrates feeds from another site, pplvr.com.
ATM Parts Distributor Site Using Joomla
ACG ATM parts, supplies, and repairs site with custom e-commerce using Joomla 1.7: http://t.co/drC8gZpV.
Features a custom e-commerce component integrating Joomla 1.7 with SouthWare, using web services.
Atlanta Computer Group specializes in ATM parts, supplies, and repairs. ACG uses SouthWare Netlink, for which we developed a custom Joomla application.
They use SouthWare for their enterprise resource planning (ERP) software, together with Netlink. Their previous site ran on a Windows platform, but they did not have a convenient way to editing their own pages while incorporating e-commerce into their site.
Working very closely with staff at Opus Integrated Business Systems (http://www.opus-is.com), we developed a Joomla SouthWare Netlink integration including component, plugins, and modules from the ground up. These use web services (SOAP) to connect to SouthWare / Netlink and display products, categories, pricing, and so on. Opus built the web services and some of the Ajax functionality, while we managed the Joomla integration and consumption of web services. The final site is fully SSL-encrypted and features seamless SouthWare e-commerce with Joomla as the framework and content management system.
Forcing Moodle admins to use English but regular users use another language
Add this to your theme’s PHP pages wherever you want this functionality. Add it above the <html> tag … in our case we force regular users to see the site in Farsi, but admin users see it in English. We also hid the language menu (comment out “echo $OUTPUT->lang_menu();”).
Here’s the code:
<?php
function curPageURL() {
$pageURL = 'http';
//if ($_SERVER["HTTPS"] == "on") {
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= "s";
}//other way to detect SSL??
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$url = curPageURL();
$admins = get_admins();
$isadmin = false;
foreach ($admins as $admin) {
if ($USER->id == $admin->id) {
$isadmin = true;
break;
}
}
if ($isadmin) {
if(
!isset($_GET['lang']) ||
(isset($_GET['lang']) && ($_GET['lang'] != 'en'))
){
if(strstr(curPageURL(),'lang=fa')){//if not home page
$url = str_replace('lang=fa','lang=en',$url);
header('Location: '.$url);
}
else{//URL must not have an = in it, therefore it has GET vars and has a ? as well. It is possible to have a ? without ='s though, so we check for = and not ?.
///header('Location: '.curPageURL().'?lang=en');
}
}
} else {
if(
!isset($_GET['lang']) ||
(isset($_GET['lang']) && ($_GET['lang'] != 'fa'))
){
if(strstr(curPageURL(),'=')){//if not home page
$url = str_replace('lang=en','lang=fa',$url);
//header('Location: '.$url);
}
else{//URL must have an = in it, therefore it has GET vars and has a ? as well. It is possible to have a ? without ='s though, so we check for = and not ?.
//header('Location: '.curPageURL().'?lang=fa');
}
}
?>
Magento strangeness
I’m building an e-commerce site with Magento 1.5.1.0 and could not help but notice that when you go to Manage Products, there is no way to filter by categories. There are tons of columns and filter options, except filtering by category. Pretty strange for an e-commerce system.
You can go to Manage Categories and view which products are in which category, but you can’t directly edit the products from there … you have to use Manage Products for that. In other words, you just have to type in some part of the product’s name and filter on that.
For all the rage that Magento is, I cannot fathom how this could have been overlooked except intentionally. Yes, you can attempt to add a Categories column in (see this link) and surely there are commercial add-ons for this, but something like this should be one of the first core features in any e-commerce platform in my opinion. There are some who speculate that Magento was intentionally built to look good but be lacking in certain respects, to coax people towards purchasing add-ons and support. I can see why they would think that way.
Auto Metal Direct: car parts distributor using Joomla
Auto Metal Direct (http://t.co/1vFZf9ef) is a car parts distributor based in Atlanta. Their new site uses Joomla 1.7, and we built a custom Joomla extension integrating SouthWare e-commerce with Joomla using web services (SOAP). We developed a component, two plugins, and a couple modules. Meanwhile, the customer is now able to edit their own pages with ease, whereas before they had to rely on their webmaster for every change.
So long, GoDaddy
We have been getting fed up with GoDaddy’s advertising (questionable ethics with regard to objectification of women, shooting of elephants, etc) as well as the barrage of products they try to push on us, and are finally starting to transfer our domains away from them. We looked into both NameCheap.com and Moniker.com and both looked fine. We went for NameCheap.com in the end, for no particular reason other than that they seem to have gotten a bit more favorable press, or at least more press than Moniker.
In a similar vein, we are planning on moving our bank accounts away from certain unnamed corporate behemoths to a local community bank who may actually feel they have a stake in our success.
Drupal 7 Site for electronics manufacturer
We built a new Drupal 7 site for EIT, an electronics manufacturer based in Sterling, Virginia: http://t.co/L1jVOfPL.
EIT, LLC ($75+ M/yr) is located in Sterling, Virginia and has been providing complete electronic design, assembly and test services since 1977. EIT’s old site was built using static HTML pages and was becoming outdated. EIT staff needed a way to edit pages without involving web developers in every content change. In addition, EIT’s southern Virginia facility (in Danville) had its own site at eitsouth.com, the contents of which needed to be merged into the main corporate site at eit.com.
We designed and built a new site from the ground up using Drupal 7, configured in such a way that designated staff members could edit pages. The page editor supports content revisions, so that editors can roll back to a previous version at will. The design features an image slideshow on the home page and a customized header image for each area of the site. The Careers page allows the HR derpartment to add job openings that candidates can apply for on the spot, including the required EEO (Equal Employment Opportunity) form. Submitted form data is emailed to relevant personnel within the company, and can be exported to CSV or Excel formats.
Front Page Slideshow Link Problem
FPSS is a great slideshow addon for Joomla, Drupal, and standalone slideshows.
They have a new version for Joomla 1.7, with a much improved interface. When it comes to linking slides, it seems you can choose to display links for all slides, or not. But what if you want links on some slides but not others? In such a case, if the user did not supply a URL, the link will say “http://www.yoursite.com/URL”. You could enter “#” or “javascript:;” as the URL, but one cannot expect non web developers to remember to do this. The user should not be required to take additional action just to NOT link a slide.
We wrote a quick fix for this. Open up the default.php template file for the FPSS layout you’re using. We used JJ-Oobs so we opened up /modules/mod_fpss/tmpl/JJ-Obs/default.php. Right after “foreach($slides as $slide):” insert the following
if($slide->link == 'URL'){
$slide->link = 'javascript:;';
}
We used a “javascript:;” URL rather than “#” because this way if you slideshow is far down the page, clicking it will not take you back to the top of the page … using “#” can conflict with named anchors but “javascript:;” does not.
Testing websites for iPad/iPhone compatibility
There’s a very handy utility called iBBDemo2 that lets you test websites using an iPhone / iPad emulator. We used it with vineyardartsproject.org. It does not do a great job emulating video. For example, using standard YouTube embed code (an iframe), it renders a black box where the video would actually be, even though the video *will* run correctly on a physical iPhone. Other videos (e.g. locally hosted video) would be much harder to troubleshoot reliably using this tool.
It also seems that targeting for iPhone using CSS doesn’t really work with iBBDemo2. For example:
@media only screen and (max-device-width: 480px) {
#somedivtag{
width:300px;
}
}
Yondrr – children’s site
Yondrr.com features submitted art, writing, and videos by and for children. We were brought in to expand the scope of the site’s content, and when we got involved the site design was already in place (done by Tim Kenney Marketing in Washington, DC). We revamped the file structure using PHP includes for common page elements, designed user-friendly buttons for the home page, and built jQuery image galleries for the art and writing areas.
Moreno Diaz Law Firm – Our first Concrete5 Site!
just added: Moreno Diaz Law Firm http://tinyurl.com/4md4o72
This is the first site we create using Concrete5. Overall it was a good experience.
I feel that the editing process could be streamlined, as slick as it is. Let’s get my basic gripes out of the way:
- Inserting images and file links requires too many clicks. Why not show a “Use this image” or “Use this file” button after the file has successfully uploaded … the way WordPress does? The average user is going to have a hard time locating the file they just uploaded.
- File management should support directories. Maybe you can add those using FTP, but it isn’t possible with Concrete5. Instead, it offers “Sets” as a way of organizing files. After familiarizing myself with this, it worked OK, but I can’t help but worry that I am potentially overwriting existing files. Using directories allows me to know exactly where files are. It is the conventional approach, and using conventions is one sure-fire way of ensuring usability, even if it isn’t as slick as Sets. A first-time editor shouldn’t have to learn a new method of organizing files: use the conventions that people know … files and directories.
- Saving a page takes two clicks; Exit Edit Mode, and then Publish. Why not simple show a simple Save button showing a friendly icon of some sort, and save a version of the page automatically? Currently, you are presented with a screen asking you to name the version of this page. It’s great that versioning is built in, but it should be as painless as possible. In my opinion, a timestamp should be sufficient for the version name.
- Blocks are easy to use, and saving blocks for reuse is easy too, using the “Add to Scrapbook” feature. Unfortunately, these blocks do not function the same way as Drupal blocks or Joomla modules. When you insert a Concrete5 block from your Scrapbook and then want to edit the block once and have it update on multiple pages, it’s a no-go. You will need to edit it in place on one of your pages, then re-save it to your Scrapobook, then remove the previously inserted blocks from your pages, and finally re-insert the block from your Scrapbook. This is a severe limitation in my opinion, which will limit Concrete5′s usefulness on larger sites. Imagine having a block assigned to a few dozen pages. Who wants to reinsert a block that many times?
Please note that my comments are based on a default configuration using Concrete5. Perhaps some of these issues can be overcome with modifications, but I think that is beside the point. I do still think it is a great content management system for “brochure” sites of perhaps up to a dozen pages, but would not yet consider it for any larger-scale content management. For that I will stick with Joomla and Drupal.
redesigned bsicorp.net with Drupal
We recently redesigned bsicorp.net using Drupal 7.. in Chinese/Japanese/Korean. Oh, and English too.
Drupal 7 features a vastly improved administrative interface that is inspired by WordPress and secondarily by Joomla’s modal / lightbox windows. Paired with Drupal’s very robust content management features, this is a potent combination. Administration in Drupal is much less daunting now than it was in version 6.
Designing a multilingual site using Drupal 7 is also easier now. There’s a handy Translate tab, and language management and configuration is pretty straightforward, yet offers sophisticated options at the same time. A very good balance in my opinion.
Hey, wait, I’ve got a new complaint ..
Lately it seems we’ve been on a tear, complaining about other sites that are falling down on the job. There is a point to all this: test your sites in all major browsers.
In our last post, we showed how Google Chrome can no longer be ignored. However, some major sites apparently still pretend Firefox doesn’t exist.
Case in point: E-onlinedata.com. Now, I like them. I use them for Authorize.net accounts. Their previous site needed serious help, and their new one does look infinitely better … in Internet Explorer 8 and (magically) Google Chrome, but not Firefox. I think they got lucky with Chrome; that can’t have been on purpose.
Firefox renders their menu system without any CSS, so that it overlaps their layout and becomes ugly and unusable.
Not only do they have CSS problems, but their content is not fully fleshed out, as it turns out.
Just try visiting their home page, then select Internet Merchant from Become a Merchant (top left), then muddle your way through to click on the Authorize.net link under Merchant Services (right-hand menu). You are taken to a super-long breadcrumb / pathway, with no content whatsoever below. Sorry, customer. That’s the end of the line for you:
960 grid layout technique
Check out http://960.gs/ for a great way of creating layouts for 960-pixel wide designs.
This method is used by RocketTheme for their newer Joomla templates, for example. I think it’s a sensible approach to slicing up the areas of your layout. Give it a try!
Fixing Itemids for Joomla / K2's tag view
This article is about K2, which works with Joomla.
We created menu items pointing to “generic” tag views. Each tag has its own Itemid, which is fine. However, when you click on “read more” for any of the items on the generic tag page, the ‘read more’ link uses the default K2 Itemid rather than the Itemid of the current page / menu item. This does seem like a bug to me. The read more links should use the Itemids of the current page or at least the menu item that brought the viewer to that ‘read more’ link.
In our case, K2′s default Itemid is 17 (as set in the menu). We also have a menu item for a tag view, with an Itemid of 37.
The ‘read more’ URLs should have been in this format:
index.php?option=com_k2&view=itemlist&layout=generic&tag=Health%20Care&task=tag&Itemid=37
.. but were showing up as:
index.php?option=com_k2&view=itemlist&layout=generic&tag=Health%20Care&task=tag&Itemid=17
We have written a small override that solved this for us, since I could find no other way to solve this. We dislike core modifications but in this case it seemed to be the only way:
In /components/k2/models/item.php around line 62 (search for “read more link” .. it should be the first one), add this:
//mod to replace K2 Itemid with current page’s Itemid.
if(JRequest::getVar(‘Itemid’) && JRequest::getVar(‘layout’) && (JRequest::getVar(‘layout’) == ‘generic’) && JRequest::getVar(‘task’) && (JRequest::getVar(‘task’) == ‘tag’)){
//MAKE SURE TO CHANGE “Itemid=17″ TO WHATEVER ITEMID YOUR K2 USES:
$link = str_replace(‘Itemid=17′,’Itemid=’.JRequest::getInt(‘Itemid’),$link);
}
//end
ASP.net MenuItem mouseovers? Not so fast ..
I had some ASP.net 4.0 Hyperlinks and Images and tried converting them to MenuItems, but it’s not possible to set a mouseover without some REALLY clunky workarounds (see here .. and other examples as well). Also, you can’t assign an ID to a MenuItem, nor a class, so you can’t do it with CSS either. Well, you could (using CSS’s nth-child selector) … but not cross-browser. I’m a bit baffled that the MenuItems don’t take an ID, CSS class, OR mouseover easily!! It’s a very common requirement or at least a commonly used design feature / effect, and ASP.net’s been around long enough to have added this at some point!
Maybe I’m missing something obvious here .. ?
Also, since I was using images for the menu items, I needed to hide the text. I managed to hide the text from the menu items, keeping only the image. But when you edit the menu, you can no longer see the menu item names, so you may get lost when trying to edit the menu items. It isn’t ideal, especially if you need to hand the project off to a customer who wants to edit the menu on their own. Again … why the lack of elegance when .net can do so many great things otherwise? There should be a simple option to hide the text.
Impressions of Joomla 1.6 Beta 3
Well, Joomla came out with another 1.6 beta, and it has certainly come a long way. I remember testing a 1.6 beta two years ago. Here are some highlights;
Access Level Control (ACL)
It now features a robust ACL system, though some of the inheritance rules will take some getting used to. This is often cited as a feature Drupal has and Joomla lacks, but soon enough that will be a moot point. From my understanding there will be just one more beta in about two weeks, and then it should be time for 1.6!
Nested categories
Joomla always suffered from a rigid approach to categorization, with Sections and Categories. A section could contain categories, but there could be no sub-categories. This long-running annoyance has finally been been vanquished with Joomla 1.6. It uses only categories (no more sections!), and they can be nested as deeply as you want. I’m sure at some point someone will nest a category 666 levels down, and run into a terrible bug there … but in theory it should be fine, because a category would simply be assigned to a parent category .. the number of sub-levels should have no bearing on it.
Drupal has of course supported nested categories for a long time, where they are called Taxonomy. I think Drupal’s Taxonomy is still more advanced than Joomla 1.6′s category system, but for many, perhaps most users, just having nested categories is en0ugh. Those who want to do more advance PHP magic will naturally be more inclined towards Drupal anyway, and to words like Taxonomy.
The elimination of Joomla’s sections does mean that template code that relies on section IDs will have to be changed to be 1.6-compatible. It will have to check for category IDs instead. It also opens up an interesting possibility of (for example) using a database query to select only those categories that are nested within the current category. That could come in handy in displaying category ‘blogs’ or headlines in a more automated fashion than creating menu links. And speaking of menu links;
Menu Management
Joomla’s menu management has gotten very slick;
- Changing the menu type is now faster.
- Much more control over the menu items: meta data, page titles, robot rules, page class styling, menu link title & CSS attributes.
- Module assignment from a menu item. You can still assign modules to menu items, but now you can also do this from the menu item itself, rather than having to edit the module separately.
- Batch processing multiple menu items
- Language filtering; show your menu item only for certain languages, or for all of them. Would be nice if you could select several languages and hide it on others, but that may be coming.
- Set template style
Redirect manager
Joomla 1.6 has a new component for managing URL redirects. Presumably this writes to the .htaccess file and created a 301 redirect.
Banner Manager
This is not too different from the 1.5 version, but features “Tracks”, which tracks clicks and impressions in date-filterable and CSV-exportable fashion. Finally we will be able to do some more robust reporting.
I am however baffled that banner clients still have no way to log in and view their banner’s statistics. I think most clients would want that, and offering that ability will help site owners gain more advertisers.
I wrote a Joomla 1.5 hack that got around this by using the “alias” field of the banner client to hold a username. That allows us to associate a banner client with a username, and then we can use that to display banner statistics to a given Joomla user (and only that user). Looks like I will have to port that hack to 1.6. Sigh.
Client login for Joomla 1.5 banner component
For the longest time I have been frustrated that the standard banner component doesn’t let banner clients login and view theirbanner statistics. I had been using OpenX but it is a resource hog and is really overkill when all I want is to be able to show a client how many clicks they’ve had so far. I don’t want them to just take my word for it.
Well, after trying out various solutions besides OpenX, I thought to myself 2 hours ago, “why can’t I just use Contact field in thebanner client area and enter a Joomla username, and then write a custom model for com_banners to display the statistics if the current Joomla user is the same as the one listed as the contact for a client?”
So that’s what I did. It is actually two queries. #1 checks the current username and selects all clients with that username (should be just one .. I limited it to one in the query), and selects the correct cid (client id). #2 selects all active banners for a given cid and spits them out, showing the banner, clicks, impressions, and CTR. I also added in some custom HTML to display a PayPal button … ideally this should be done in a View, not a Model, but the Banners component doesn’t seem to follow the MVC structure 100% so I didn’t either.
I did have to modify a few other files. Here are my modifications – this is on Joomla 1.5.18 but should work for any 1.5 release.
It’s as easy as 1-2-3;
1.
/components/com_banners/controller.php:
Add this after the end of function click():
2.
/components/com_banners/bannerstats.php
This is a new file – containing this code:
// Create the controller
$controller = new BannersController( array(‘default_task’ => ‘bannerstats’) );
// Perform the Requested task
$controller->execute(JRequest::getVar(‘task’, null, ‘bannerstats’, ‘cmd’));
// Redirect if set by the controller
$controller->redirect();
3.
/components/com_banners/models/bannerstats.php
This is a new file containing this code:
// Check to ensure this file is included in Joomla!
defined(‘_JEXEC’) or die( ‘Restricted access’ );
$document = &JFactory::getDocument();
jimport( ‘joomla.application.component.model’ );
jimport( ‘joomla.application.component.helper’ );
/**
* @package Joomla
* @subpackage Banners
*/
class BannersModelBannerstats extends JModel
{
function bannerstats(){
$banneruser = & JFactory::getUser();
$dbgetclient = &$this->getDBO();
echo “<h2>”.$banneruser->name.”‘s Ads</h2>”;
echo “<p>Already a customer? If your ad is about to reach the paid for number of clicks, you can make another payment using this button:</p>”;
echo ‘<form action=”https://www.paypal.com/cgi-bin/webscr” method=”post” target=”_blank”>
<input name=”cmd” value=”_xclick” type=”hidden”>
<input name=”lc” value=”US” type=”hidden”>
<input name=”business” value=”youremail@yourdomain.com” type=”hidden”>
<input name=”pal” value=”4UXZK24C297M6″>
<input name=”item_name” value=”The name for this transaction” type=”hidden”>
<input src=”/images/x-click-but01.gif” name=”submit” alt=”Make payments with PayPal – it\’s fast, free and secure!” border=”0″ type=”image” width=”62″ height=”31″>
<br>
‘;
$dbgetclient = &$this->getDBO();
echo “<h2>Active ads for: “.$banneruser->username.”: </h2>”;
$getclient = “SELECT cid FROM #__bannerclient WHERE contact=’”.$banneruser->username.”‘ LIMIT 1″;
$dbgetclient->setQuery( $getclient );
$getclientresult = $dbgetclient->loadObjectList();
for($i = 0; $i < count($getclientresult); $i++) {
$cid = $getclientresult[$i]->cid;
//echo “cid: “.$cid.”<br />”;
}
$dbgetbanner = &$this->getDBO();
$getbanner = “SELECT * FROM #__banner WHERE cid=”.$cid.”";
$dbgetbanner->setQuery( $getbanner );
$getbannerresult = $dbgetbanner->loadObjectList();
for($i = 0; $i < count($getbannerresult); $i++) {
echo “<img src=’”.JURI::root().”images/banners/”.$getbannerresult[$i]->imageurl.”‘ border=’0′><br />”;
echo ‘URL: ‘.$getbannerresult[$i]->clickurl.’<br />’;
echo ‘Clicks: ‘.$getbannerresult[$i]->clicks.’<br />’;
echo ‘Views: ‘.$getbannerresult[$i]->impmade.’<br />’;
echo ‘CTR (clickthrough rate): ‘.number_format((100*($getbannerresult[$i]->clicks)/($getbannerresult[$i]->impmade)),2).’ %<hr />’;
}
}
}
?>
You can then create a link in the User Menu pointing to index.php?option=com_banners&task=bannerstats.
It will detect the current logged-in user’s username, check the “contact” field of the banner clients, and select the active banners for that client. Needless to say, the contact field should contain that person’s username and nothing else, or it will not work.
In the future maybe there can be a special field allowing us to choose a username or enter one, instead of using the Contact field which is not really meant for that. I had considered making this a separate component, but it is really something I would like to see become part of the regular com_banners component.
Feedback is welcome – as far as I can tell this is secure and works, but others may have a better idea about that.
Review of Concrete5 CMS vs. Joomla / Drupal / WordPress
While Joomla and Drupal are the leading open-source CMS systems in terms of adoption by developers, both still have room for improvement (and are indeed improving rapidly). In a nutshell, Joomla comes pre-installed with most everything you would expect to have on a site, and with a few extra addons you’re good to go. The Joomla 1.5 MVC architecture is powerful and the template coding is a clean and straightforward implementation of views in an MVC structure. On the other hand, Drupal is a framework that can be a blog, corporate site, social community, you name it. Out of the box it is not going to do very much for you; it requires customization, adding modules, etc. It offers much more fine-grained control over user permissions, event triggers, customizable views of content presentation (the “Views” module together with CCK), and .. dare I say it … an awful theming system. Consider it the price to pay for getting to use what is certainly a very powgerful system.
In terms of interface usability (for the regular user, not us web developers), Drupal and Joomla both can be quite easy to use, but not out of the box. Drupal takes a bit more work to get user-friendly. Especially input formats need attention. The FCK editor with IMCE for file uploads is great, and the Wysiwyg module is probably the next big thing in Drupal editors – very nicely done.
WordPress beats both Joomla and Drupal in usability, hands-down, but customizing WordPress to make it function like a CMS is not as simple as one would like. It’s not WordPress’s fault: it’s a blogging platform.
OK, and now the reason for this post. Concrete5.
Concrete5 is yet another CMS built on PHP/MySQL, and claims to beat Joomla and Drupal, both in terms of usability and superior code. A big claim, for sure. We tried it out on the Plethora Design development server and LOVED the ease of use when editing pages and customizing the look and feel of things. Joomla has some extensions that allow in-line editing, but not in-line template modification like this, except in very early alpha stages. Drupal is working on similar things but this is all still in alpha and beta, and months if not years way from being in core. So, one point for Conrete5.
Since it claims to be so easy to use, I tried to put myself in the shoes of one of our clients. I gave myself 10 minutes to figure it out, with using any tutorials or documentation, because if it is easy to use, tutorials and documentation should not be needed. So here’s what I did. I said to myself:
“I want to add a page. Oh, look, there’s an Add Page button”. Great.
“I need to edit this page. Aaah, an Edit Page button.” Cool.
What is especially wonderful is the ability to drag and drop page elements on the fly, and there is a nice context menu available when you click on an editable item.
Note that frontend editing is possible with both Joomla and Drupal but Concrete5 presents it in a (much) slicker way.
A very nice feature is the ability to edit the built-in image gallery.
Well, that covered most of the needs a small “brochure” site might need.
Last item;
“I need to add a contact form and also an application form with file uploads.”
I was not able to find a way to add a form. I know in Concrete5 forms are called “widgets” and you can also use external forms. Why is there no simple “Add Form” button like there is an “Add Page” button? I could find no way of doing this, even though the default installation (with sample data) does have an About page with a form embedded in it, and there is a Forms core block installed by default. I also know that file uploads are supported on forms. That’s all well and good, but now I want to add one, and I can’t. I spent about 10 minutes looking into this, checking their forum and documentation, and was none the wiser. I’m sure the answer is simple, but it should be obvious, especially for a CMS claiming such superiority. I may give it a whirl again at some other time, because it does look very well-suited to small sites … not for anything beyond that in my opinion (although I do realize it has a solid API and a dedicated developer community, so I could be taking this back in the future!).
Update:
See Tony’s comment below and this screencast on how to add a form in Concrete5. More videos for end users here.
Adding forms *is* very easy. The “Add to Main” link is not visible enough, but once you know where to look it’s not a problem. I think there ought to be an “add to main” icon floating to the left or right of the main content area, so one doesn’t need to scroll all the way down the page to find it. But the form editing here certainly blows Joomla and Drupal out of the water with its ease of use.
Conclusions
In terms of ease of use it is in the same league as hosted site builders such as Google Sites and Yahoo SiteBuilder (and that is not an insult!!), but with more control, and the ability for developers to extend the functionality. It’s as easy to use as WordPress, with the added bonus of being able to adjust the look and feel on the fly too. Overall it looks like a great CMS and is worth trying out. Why haven’t Joomla and Drupal added this kind of easy editing, after their many years and thousands of dedicated developers? It’s a bit baffling.

