-
Url rewriting on Postnuke 0.8
(News)
-
Main principles of the mod rewrite
For information, the URL rewriting is a module that you can activated in your apache to rewrite the links of a site in order to simplify their reading.
The idea is that the Pn Team also thought that the mod rewrite was not necessarily available / activated on all types of servers (particularly on Windows servers). Indeed, the Postnuke team offers rewritings based on tips already heavily used in management systems like blogs.
Before you begin, here is the format of a link without rewriting.
without rewriting
index.php?module=Users&func=logout Index.php? Users & module = func = logout
URL rewriting without mod rewrite
This rewriting reproduced a "virtual" Folders system on your site, links look like this
URL rewriting without mod rewrite
index.php/Users/logout
In terms of mechanism, it is very simple, when your Web server receives a request for a link, it loads instinctively page "index.html". In this index.php, the parameters of the request are recovered via the header (you can look in "phpInfo" there is a field $ _SERVER [ 'REQUEST_URI'] which corresponds to this information).Then these parameters are interpreted , between the first two "/" is the name of the module, between the two others, the function name. Now Postnuke know the name of the module and function to launch.
You can pass parameters too, for instance, if you want to load a forum with id=2, the links will look like this
URL rewriting without mod rewrite
index.php/Forum/viewforum/forum:2
Note that the url rewriting uses ":" to represent the parameters in a url. So you can't pass variables like this "index.php?variable=filter:3". (be carefull if you are using Pagesetter and his filters system).
URL rewriting with mod rewrite
Optimizing the previous version
In the previous example, all links contained index.php ... but it's ugly, and functionally this file contains no
information useful to load the asked module.This trick is useful when you have no mod rewrite, but if one has an "mod rewrite enabled" server,you can use a "lighter" version of the previous rewriting without an "index.html"
Here is an example
URL rewriting with mod rewrite :Optimizing the previous version
/Users/logout
Be careful, if one of your pictures is written this way
and you load the page /MyModule/main/. "/MyModule/main/test.png" which will be searched. Note that you can make a rewriting that redirect all links of the form "/*/*/*.(jpg | png | gif)" to "$ 3. (Jpg | png | gif)." (but it's ugly).
Mode file
This url rewriting is the classical version already used in previous versions of the cms, The rewrited links are lists of words (module name, the name of function) separated by dashes. Note that this version uses a large number of regular expressions rules to do the rewriting compared to the other one, which may increase the load of your server Web.
One example here ...
URL rewriting with mod rewrite : Mode file
module-Forum-viewtopic-topic-2903-start-0.html
Note that the "module" which one would have thought there's no point in it, is made for the support of the "old style" loading of modules.
URL rewriting customized
So here is the coolest feature, which allows you to customize the URL rewriting depending on the module you want to load. Just create a "encodeurl" function in your API module (pnuserapi) that takes as parameters, the information needed to create for output a fully customized rewrited link.
After, the loading of each page of the CMS, a "decodeurl" function in the API part of the module takes care to reformat the encoded url in a form understandable by the CMS.
You can find an example of the use of this method in the module "Pages" of values addons
Format of a encode and decode url
function pages_userapi_encodeurl($args)
function pages_userapi_decodeurl($args)
This feature is interesting because it allows us to have the hands on your url, not only before loading the page, but after loading this page, allowing you post-processing actions rather interessant.
This method allow you to
- put keywords in the url: (see Pages module)
- have a single version of your rewrited url : Indeed, through the post treatment you can recalculate the url and it does not conform to your requirements, you can redirect to the good link via a redirect 301 "Moved Permanently headers.
Use case of a url rewriting "no duplicate"
Notes: A small problem nevertheless for the use of this rewriting, which is limited to the type url "user". (more details here)
This article is a translation from this "how to" released on Postnuke-France
Generated on February 25, 2008.
-
DIY: Including Video in Your PN Site
(News)
-
complicated things there are. Netscape introduced the embed-tag with theit Navigator 2.0 but it never became part of the html standard.
Moreover a patent exists that forced Microsoft to implement embed even more complicatedly.. But there is an existing JavaScript-solution that functions as a nice work-around.
There are several reasons that make Flash Video the best choice for the video encoding: The quality is good enough for most purposes and the flash plugin is the most common. Every other method is limited to an operating system (wmv -> Windows) or to rarer plugins (Real, Quicktime aso.) Jeroen Wijering wrote a nice article about Flash Video.
I used Riva FLV Encoder 2 for the encoding. It is free and supports the codecs I needed.
Jeroen Wijering not only wrote an article about FLV he also wrote the Flash Video Player which can be used to embed the videos into your site.
I use Pagesetter to store the metadata. My publication type has three fields: title, description and filename. Filename is im my case also a string because the videos are too big to upload them via HTML forms. We upload them into a predefined directory and only enter the filename into the form field.
The flashplayer is stored inside the themes folder:
themes/myTheme/flash/flash_flv_player
And you have to add a javascript call to the site's header:
[code][/code]
The -list.html-template of the publication type looks something like this:
[code]
Generated on April 3, 2007.
-
Development Update, February 2007-02
(News)
-
release, and some is part of the current nightly build from SVN. The items that are part of the MS3 package are indicated with a (*).
Installer and upgrade path
The installer for .8 now also checks for a web-user writable pnTemp directory. Before, only it's subdirectories had to be writable. However, more and more modules need a (temporary) writable directory of their own (for example cache directories for image creation or rss feeds). With a writable pnTemp, these modules are now easily allowed to create that directory themselves if it does not exist. (*)
The upgrade path from the historic .7 family has been updated: Some code has been added to migrate blocks placements into the new block_placements table. (*)
Furthermore, old style (legacy) blocks can now be stored in the /config/blocks directory. The specific files do need to be copied manually from the old /includes/blocks directory to it's new location. (*)
Core (API) and environment variables
In the core pnAPI, get_magic_quotes_runtime() was called lots of times for different purposes. With an internal caching method, the result is stored in the global PNRuntime array. Big advantage is that the site's speed has been significantly improved. (*)
Robert has added an enhancement to allow the pnSessionGet/Set/DelVar functions to accept an (optional) path argument (arguments 'autocreate' and 'overwriteExistingVar'). This will allow for easy setting of complex array structures. The change only adds extra arguments to the existing functions and are backwards compatible. At this moment, no direct usage has been committed yet.
PostNuke Object library
At this stage of development, a lot of changes are (and have been) made to the object library. Most of them are 'simple' bug fixes, but some changes are worth mentioning here (additional functionality or changed methods).
In the DBUtil class, there now exists a new method to increment a field with the function incrementObjectFieldByID. This can be used by module authors for updating read counts of content items for example. (*)
Additionally, the function selectScalar has been added (which takes a SQL quesry as argument). This is mostly useful for places where you want to do a "select count(*)" or similar scalar selection.
The utf8 conversion functions (convertFromUTF8 and convertToUTF8) have moved from AjaxUtil to DataUtil when solving a bug to keep the users input in Ajax driven fields as they are intended.
While solving a Google AdSense script bug, where the script tags were automatically cleaned by the safeHTL output filter, a new feature has been added to FormUtil: Before cleaning posted input on an already installed site, the FormUtil now checks if the current user has overall admin permissions. This allows site admins to input potentially harmful tags (javascript for example), but it's their site after all!
Jörn has improved CSS style handling in pnForm plugins, as he has changed some pnForm classes to be derived from pnFormStyledPlugin, which in itself is derived from the original pnFormPlugin.
Because it's better to read the languages directory first for available languages and compare that result against the full list of languages in stead of the other way around, the LanguageUtil has a new function getInstalledLanguages. This now significantly reduces the number of directory checks.
To ensure that most commonly used plugins are found as early as possible, the order in the pnRender class, where the system is searching for plugins, has been modified. The current correct order for the 0.8 distribution is:
system/pnRender/plugins
system/Theme/plugins
config/plugins
current theme-directory/templates/modules/$module/plugins
current theme-directory/plugins
current module-directory/pntemplates/plugins
Furthermore, two new variables can be added to the rendered output page using the PageUtil class. First is 'description', which is default set to the current site slogan. Second is 'footer', with the ability to add custom content just prior to the closing body tag. The latter function is applied as an outputfilter.
Finally, an additional parameter 'display' is added to the pager plugin, which can be set to either 'page' or 'offset'. This is (why am I explaning, isn't this rather self-explanatory?) to allow paging by pages, rather than offsets. It also mirrors the 'show' parameter that exists in many templates (based on the example module) but was never actually implemented.
Last but not least, the Theme class has now added support for a filters section in a page configuration file. This allows for loading of, in the first instance, custom output filters. Note there is no user interface to the functionality the moment.And, why not, the Atom theme has been updated to Atom 1.0
Module modifications
The following modules have been updated for improved .8 compatibility, or just to make administering those modules easier.
The User module now has the long awaited alpha pager for browsing users. (*)
All occurences of the block rendering APIs (read by the Blocks module) have changed from the old style call "return themesideblock" to "return pnBlockThemeBlock". (*)
To the Settings module there has been added a configurable separator for permalinks (*)Furthermore, a switch to globally disable JS Quicktags (which adds a set of buttons for common html tags to enabled textareas) is now part of the Settings module. (*)
Both the Ratings and the Multisites module are modified to meet the new standards of coding and templating. Work still needs to be done to both modules, so testing functionality for these modules may not be that worthwhile as yet. (*)
The Theme module takes over from the Xanthia module in an upgrade. This doesn't mean that it is not Xanthia anymore: it still is actually the Xanthia 3.0 engine (*).
To the Recommend_Us module a display hook has been added. This will add a list of social bookmark links, like the Diggers plugin also does.
Language files overhaul
The language defines in some modules have been reviewed and adjusted to the naming conventions of .8 (see also Dev Update 2006-06). This means that module-specific language defines start with a module-name specific prefix. Additionally, some new general language strings (using the pnML function) have been added to the core language file. The major effect this will have is to subtantially reduce the number of strings that need translating.These changes are applied to the following system modules: Admin, Admin_Messages, AuthPN, Blocks, Mailer, legal, Settings and SysInfo. ValueAddons modules will follow later.
PostgreSQL DBMS testers wanted
The .8 DBUtil class, as mentioned many times before, makes it possible to run PostNuke on different DBMS platforms, like PostgreSQL,
Generated on February 20, 2007.
-
Worm hijacks open source MySQL database
(News)
-
be press-ganged into launching a denial-of-service attack that could bring down the Web site of a company the size of Microsoft.
A worm, dubbed MySpool by security organisation SANS, is spreading rapidly amongst the MySQL user base. It automatically exploits MySQL servers and subsequently infects Windows systems when triggered by an Internet Relay Chat (IRC) server located in Sweden.
News taken from BlackHat.INFO
Generated on February 6, 2005.
-
Downloads on PostNuke.com Target of Hacker: Immediate Action Required if You've Downloaded PostNuke in the Past Three Days
(News)
-
a different server. Second, in one file there was code allowing a malicious user to execute any shell command on the web server.
As noted before, immediate action is required from everyone who downloaded the .zip package between Sunday (24.Oct) at 23:50 GMT until Tuesday (26.Oct) at 8:30 GMT.
Required Actions
1. Immediately remove the affected file /includes/pnAPI.php and replace it on your server with the original one (either from a fresh download or from http://cvs.postnuke.com/viewcvs.cgi/Historic_PostNuke_Library/postnuke-devel/html/includes/pnAPI.php?rev=1.86&content-type=text/vnd.viewcvs-markup)
2. Check the access-logs for any entry containing 'oops='. If you find any call please contact the PostNuke Security Team via http://forums.postnuke.com/index.php?module=vpContact providing the access log for further investigation.
3. Change your database details, username, password and if possible, database name.
Future Safety Precautions
In the future to avoid downloading tampered files please compare the MD5 checksums with an independent source to ensure legitimacy, such as http://www.post-nuke.net. For those unfamiliar with MD5 it is a check you can use to make sure the download has not been tampered with and can be trusted. In order to compute a checksum you need an MD5 utility and you can find a variety of tools (for windows) here: http://lists.gpick.com/pages/Checksum_Tools.htm and another favorite is the free and platform independent open source project jacksum (http://www.jonelo.de/java/jacksum/) You can also find more information about this topic on Wikipedia at http://en.wikipedia.org/wiki/Md5
Finally, be assured we are working to find the hacker and will take any and all legal action when they are found.
About PostNuke
PostNuke is a community, content, collaborative management system, a C3MS providing webmasters with a set of tools to build a dynamically generated web site within minutes of downloading the software. It's backed by a team of dedicated, talented developers, designers, and volunteers with years of experience.
General Info About PostNuke:
Modular Structure, Customized Functionality through Third-Party Modules, Advanced User Group Permissions System, Multi-language Support (Approximately 36 Language Packs Available), Embedded WYSIWYG HTML Editor Activated on Most Text Entry Areas, Site Search, Advanced API (Application Programming Interface), Focused on High Level of Security, Easy-to-Use Guided Browser Based Installation, Easily Change/Customize Your Site's Look/Feel Through Plug-in Themes, Provides advanced content management features while promoting collaboration, communication and community around the content.
A Short List of Available Modules
News Publishing, Content Management, RSS Feeds, Voting Booth/Polls, Banners Module, Comments Module- allows other modules, including
Generated on October 26, 2004.
-
PHP 5.0.1 Released!
(News)
-
Version 5.0.1
12-Aug-2004
* Changed destructor mechanism so that destructors are called prior to request shutdown. (Marcus)
* Rewritten UNIX and Windows install help files. (Documentation Team)
* Updated several libraries bundled with the windows release which now includes libxml2-2.6.11, libxslt-1.1.7 and iconv-1.9.1. (Rob, Edin)
* Improved and moved ActiveScript SAPI to PECL. (Wez)
* Fixed unloading of dynamically loaded extensions. (Marcus, kameshj at fastmail dot fm)
* Fixed ReflectionClass::getMethod() and ReflectionClass::getProperty() to raise an ReflectionException instead of returning NULL on failure. (Sebastian)
* Fixed convert.* filters to consume remaining buckets_in on flush. (Sara)
* Fixed bug in mysqli->client_version. (Georg)
* Fixed bug #29606 (php_strip_whitespace() prints to stdout rather then returning the value). (Ilia)
* Fixed bug #29577 (MYSQLI_CLIENT_FOUND_ROWS undefined) (Georg)
* Fixed bug #29573 (Segmentation fault, when exception thrown within PHP function called from XSLT). (Christian)
* Fixed bug #29522 (accessing properties without connection) (Georg)
* Fixed bug #29505 (get_class_vars() severely broken when used with arrays). (Marcus)
* Fixed bug #29490 (.Net object instantiation failed). (Michael Sisolak).
* Fixed bug #29474 (win32: usleep() doesn't work). (Wez)
* Fixed bug #29449 (win32: feof() hangs on empty tcp stream). (Wez)
* Fixed bug #29437 (Possible crash inside array_walk_recursive()). (Ilia)
* Fixed bug #29431 (crash when parsing invalid address; invalid address returned by stream_socket_recvfrom(), stream_socket_getname()). (Wez)
* Fixed bug #29409 (Segfault in PHP functions called from XSLT). (Rob)
* Fixed bug #29395 (sqlite_escape_string() returns bogus data on empty strings). (Ilia, Tony)
* Fixed bug #29392 (com_dotnet crashes when echo'ing an object). (Wez)
* Fixed bug #29368 (The destructor is called when an exception is thrown from the constructor). (Marcus)
* Fixed bug #29354 (Exception constructor marked as both public and protected). (Marcus)
* Fixed bug #29342 (strtotime() does not handle empty date string properly). (Ilia)
* Fixed bug #29340 (win32 build produces invalid php_ifx.dll). (Edin)
* Fixed bug #29335 (fetch functions now use MYSQLI_BOTH as default) (Georg)
* Fixed bug #29291 (get_class_vars() return names with NULLs). (Marcus)
* Fixed bug #29264 (gettext extension not working). (Edin)
* Fixed bug #29258 (variant_date_from_timestamp() does not honour timezone). (Wez)
* Fixed bug #29256 (error when sending large packets on a socket). (Dmitry)
* Fixed bug #29236 (memory error when wsdl-cache is enabled). (Dmitry)
* Fixed bug #29147 (Compile Error in mnoGoSearch functions). (Sergey, Antony)
* Fixed bug #29132 ($_SERVER["PHP_AUTH_USER"] isn't defined). (Stefan)
* Fixed bug #29119 (html_entity_decode() misbehaves with UTF-8). (Moriyoshi)
* Fixed bug #29109 (SoapFault exception: [WSDL] Out of memory). (Dmitry)
* Fixed bug #29061 (soap extension segfaults). (Dmitry)
* Fixed bug #28985 (__getTypes() returning nothing on complex WSDL). (Dmitry)
* Fixed bug #28969 (Wrong data encoding of special characters). (Dmitry)
* Fixed bug #28895 (ReflectionClass::isAbstract always returns false). (Marcus)
* Fixed bug #28829 (Thread-unsafety in bcmath elementary values). (Sara)
* Fixed bug #28464 (catch() does not catch exceptions by interfaces). (Marcus)
Generated on August 13, 2004.
-
PostNuke included with YellowTip Web Server 2.0
(News)
-
Due to high demand, our developers have included a selection of the most popular Open Source packages with Web Server 2.0:
PostNuke
phpBB
b2evolution
Gallery
The YellowTip Web Server was developed to make available a highly professional and easily installable package of Apache2, PHP4, MySQL4, phpMyAdmin and Zend Optimizer for the Windows platform (Win2K, WinXP).
With a convenient all-in-one installer, all components are installed in a single directory and can be used immediately after the installation process has completed. An uninstaller allows you to remove the YellowTip WebServer from your computer.
YellowTip WebServer 2.0 is OpenSource under the GPL license.
Click here for more information about YellowTip WebServer.
Click here to download YellowTip Web Server 2.0.
Generated on May 6, 2004.
-
Interview: pnCommerce-Team
(News)
-
Who belongs to the pnCommerce team?
Patrick Cornelissen: First of all there is Mario G. (gzuki) from Priesendorf/Bavaria in Germany who just finished his military service. Next is Frank Schummertz (Landseer) from Stuttgart, Germany. He works as IT specialist in a consulting company. JimHadfield (JimHadfield) is from Big Lake, MN, USA and works there as web designer. I personally live in Bonn, Germany and study computer science and software development. And Sebastian Schürmann, who already introduced himself in another interview ;-) Then there is David, he was also with us at the developer meeting, but his is afk atm so that he also didn't participate in this interview.
Let's begin where it alle started: How did your Postnuke career start?
Patrick.c: I started with Postnuke ~2 years ago. PN was much easier to install and the administrative stuff was/is very comfortable. PN has a lot of 3rd party modules too, that was very impressive.
gzuki: And the good api!
Landseer: End of 2002 I was asked to take care of the homepage of a German dog breeder club. This is a static page with only a few regular updates and my intention was to create a portal site where everyone can contribute something. So I started searching for such kind of system, stumbled upon phpwebsite and phpNuke and finally came to PostNuke. Unfortunately they never agreed to use this system so the site is still not nuked :-(
But at the moment I am working on a nuked website of the company I am working for. It will consist of a external part with information using some static sites with Xexpress and internal sites for the employees with forums, download, employee pages, tim recording and so on.
JimHadfield: I looked at several sites and finally ended up using PN for a group (http://oldihc.org) in Dec. 2001. It's been a success since the very first day. I have PN installed on several sites with some custom modules on some of them.
When did you start working on your own module?
Patrick.c: We started the project ~February 2003
gzuki: joined the team March/April???
Landseer: The breeders club website should contain a webshop for some dog related stuff and so I began evaluating PostKart when Rex stopped development and Pat asked for volunteers to fork. I had plenty of time and so I started working on pncommerce. From January to March I worked 8 to 10 hours per day on pnc. Since two weeks I am also working on the timerecording module pnHora, which will be used on the internal webpage of the company I am working for. It is currently in pre-alpha state.
JimHadfield: From the very beginning ~February 2003
What is your development like? How do you work together?
Patrick.c: Development is a lot of work, but with a good team it's possible to handle it. We communicate by chat, ML, Forums and sometimes by telephone. We also had a developer meeing in august too. I hope that the impact on the community is big :-) because the need for a good shopping cart is evident, so we hope to get positive feedback from the users out there and maybe some more help.
Landseer: PN module development teams consists of people, who normally never meet each other in real life so I work on my own as the others do also. Important decisions have been discussed in our internal dev mailinglist or in our daily chat in our EuIRC channel #pn-commerce. This and email are the most important ways of communicationg with each other. Another big thing is the CVS at sourceforge. CVS is the best thing ever invented for people working at different places :-) Mid of August our first DevMeeting took place in Würzburg, where four of the team met for the first time (generally). Via webcam our documentation guru Jim was also connected. The main development has been done by a couple of developers who could easily agree when we had to make such decisions.
The impact of the community is big, even bigger, after we released the first alpha version. Now the people know what pnc can do and so they can give us suggestions where to go to and what to implement also. Sometimes it's hard to say "Not possible at the moment" :-).
JimHadfield: The response from the community has been fantastic. CVS is a lifesaver!
What is the biggest difficulty in your development?
Patrick.c: One problem, we had, is the bad documentation. The Module Developers Guide has a lot of unclear points and the api documentation documents functions that are not written yet. Dabase has restarted the API Documentation project, so I hope it will get better soon, but this was one of the major problems from my point of view. The unclear information flow from the PostNuke leaders should be more open. We module dev's need all informations about comming changes in API, workflow or whatever as soon as possible, to be able to consider this in our strategy. We don't have time to invent the wheel 4 or 5 times because the layout system has changed for example.
Landseer: Personally the biggest problem is that I had to learn PHP and the Postnuke API at the same time. I started programming in the late 80's with Basic, Oberon and C on an Amiga so the basics are there and the step to PHP was not so difficult.
JimHadfield: My biggest problem (?) was working with a bunch of guys that were great to work with! I don't usually get that lucky!
What features should the Postnuke .8 core have to simplify your work?
Patrick.c: The SSL support for the modurl function we gave the dev team. And Smarty :-)
Landseer: The templating engine that will be in .8 simplifies our work dramatically. We are already porting pnc to Smarty and see, how much code we are going to get rid of in pnuser/pnadmin without minimizing the shop's capabilities. Another needed thing would be generic SSL support in .8, we made a suggestion to the core devs (really easy thing), which did not make it into the .726 package, but maybe in the next one.
Which route will Postnuke/your module in your opinion go in the future?
Patrick.c: Finish Smartification, add custom properties and add the missing small tweaks. After that maybe a compatibility layer to make it possible to use the module on different Postnuke-descendants. Custom properties is one of the most demanded features. You can create for example a tshirt product with it and assign different sizes. The whole thing is very complicated because there are a lot of thigs that we have to keep in mind, so it may take a while until this is completely working.
Landseer: I don't see a clear future for Postnuke (which does not mean that I do not see any future for PostNuke!!). The information politic by the projects leaders is very poor and can be heavily improved. The open module developers mailing list is dead (at least I do not get anything from there), compared to the Xaraya dev list it is more than dead. We can be glad that the community is strong and giving support where it is needed.
JimHadfield: I have to agree with Frank.. Sometimes it is real hard to truly see where PN is going with all of their internal bickering. We will still produce a igh quality product/module that will work with it and others.
What should users of your module regard?
Patrick.c: we have some difficulties with our plugin system and windows servers, the rest works fine most of the time. 75% of all problems occur because people have not filled out the main settings, wrong permissions or missing files.
Landseer: The strongest point is that pncommerce is completely modular and that it can be easily extended. This makes it a very powerful shopping cart solution which will even get better with Smarty, there you can do things which are not possible right now. The 0.82 version still looks to much like PostKart, this is going to change in the next version. Maybe this is the weakest point. But "under the hood" there is nearly nothing from the old program left over, I guess that more than 98% of the code have been changed to meet our requirements. I think that there will be a time when you can see two completely different shops that both use pncommerce, but with their own templates and their own layout.
JimHadfield: The biggest problem?? People do not read the docs...
Anything else you always wanted to say about Postnuke/your module?
Patrick.c: We hope to provide a good module to the community and help Postnuke to cover more areas. In return I hope to get mor
Generated on October 9, 2003.
-
Web Accessibility - An introduction
(News)
-
Accessibility - In General
According to the German federal law on equality of treatment of handicapped
persons (BGG §4) ", constructions, means of transportation, technical
commodities, systems of information processing, accustic and
visual sources of information and communicative systems are accessible when they
are accessible and usable for handicapped persons unaidedly, in the usual way
and without special difficulty."
Basically, accessible web pages aren't only accessible for the average user
at his desktop pc with the latest browsers. Web-accessibility is not only considerate
of the various utilities that handicapped persons use to perceive a web page,
but also of users with older browser versions or with special access hardware.
Some figures to give an idea of the size of this group (statistics from Germany):
10% of the male population is color-blind. Web pages with low contrasts
(eg. black fonts on dark-blue background) is for them practically unreadable.
"Press the green button to verify" is meaningless to them.
5% of the population is blind or visually handicapped. They use special utilities
and hardware like Braille-displays or screenreaders.
11% of the population is older than 65.
5% of internet users don't use Windows, but MacOS, Linux, PDAs or cellphones.
Numerous sites, especially large ones, still have up to 20% users visiting them through 4th generation Netscape
browsers.
If you don't only aim at gamer kiddies with 19" displays, you should start
thinking about whom you exclude with your killer design. A blind person for example,
who cannot use a company`s internet pages, will choose another vendor. But what
can a blind person do when his registration office's internet site is not accessible?
The Legal Side
Since May 1st, 2002, the ordinance for accessible information technology
(BITV) became effective. All federal institutions are obliged to make their internet
sites accessible - in the sense of the word used in this article. Governments are called to work out
similar state laws which oblige state and municipal institutions to follow accessibility guidelines.
BGG and BITV are based on the EU action plan "eEurope 2002", initiated
in 1999 and finalised in 2000 by the European Council. eEurope aims at 3 main goals:
A cheaper, faster and more secure internet
Advancement of internet use
Investment into persons and abilities
The latter comprises the participation in information technology of as big
parts of the population as possible. Summarised under the term "eAccessibility",
access to eCommerce, eGovernment and so on is to be made possible. This was to be
implemented with the adoption of the Web
Accessability Initative's guidelines.
Guidelines for Practical Use
Already in 1999 the World Wide Web Consortium (W3C) released the Web
Content Accessibility Guidelines 1.0 and made it quasi-standard for accessible
internet design. Since then many of the rules have proved too restrictive,
irrelevant, incomprehensible or simply not representative of the state of technology
anymore. Some of them even turned out to be not internationally applicable.
For these reasons a version 2.0 is in the making. Since v. 2.0 is still in development, this
text will only relate to WCAG 1.
The Web Content Accessibility Guidelines 1 are split up into 3 priorities:
Priority 1: A Web content developer must
satisfy this checkpoint
Priority 2: A Web content developer should
satisfy this checkpoint
Priority 3: A Web content developer may satisfy
this checkpoint
If you violate a regulation of priority 1, many people will be excluded. A violation
of priority 3 regulations excludes only few. There are 14 main regulations, with
the priorities attached to all of their subcategories:
1. Provide equivalent alternatives to auditory and visual content.
2. Do not rely on color alone.
3. Use markup and style sheets, and do so properly.
4. Clarify natural language usage.
5. Create tables that transform gracefully.
6. Ensure that pages featuring new technologies transform gracefully.
7. Ensure user control of time-sensitive content changes.
8. Ensure direct accessibility of embedded user interfaces.
9. Design for device-independence.
10. Use interim solutions.
11. Use W3C technologies and guidelines.
12. Provide context and orientation information.
13. Provide clear navigation mechanisms.
14. Ensure that documents are clear and simple.
There is also a W3C-list of suggested Techniques
for Web Content Accessibility Guidelines 1.0.
Testing Accessability
Several tools exist for testing the accessibility of your website:
http://www.w3.org/WAI/WCAG1AAA-Conformance
http://bobby.cast.org/
http://www.cynthiasays.com/
As a result you receive 3 levels of conformance:
Conformance Level "A": All Priority 1 checkpoints
are satisfied
Conformance Level "Double-A": All Priority 1 and
2 checkpoints are satisfied
Conformance Level "Triple-A": All Priority 1, 2,
and 3 checkpoints are satisfied
Internet sites of German federal instititions have to fullfil Double-A conformance.
Recommended is Triple-A.
Not only for handicapped persons
A main problem with accessibilty is that a web site must cater to the needs of two different interest groups: On the one
hand, handicapped persons that already have to use the latest browser version
in cooperation with their hardware and utilities, and on the other hand, users
with old browsers.
This problem is however a perfect focus area for the idea behind CMS-es: The separation
of content and layout. It becomes possible to detect the user browser client, and in a manageable way offer
a classical HTML 3.0 page or a modern HTML 4.01 page, with the same content.
Practically speaking, modern web design means above all to do without tables for layout
use. Tables have always been a crutch when it comes to creating layout, and more so today than ever.
Modern layout is created via CSS. A nice example of how accessible
design can be created can be found at http://www.inknoise.com/experimental/layoutomatic.php.
This also shows that accessible web sites do not have to be plain text.
Tables should only be used the way they were originally intended: For example
as an address table with columns and rows, column heads and so on. Used this way, also
the tools of blind persons can make sense of them.
Accessibility and Postnuke
Making a Postnuke site accessible is practically impossible: While themes can
easily be created with CSS, you will fail at the modules, which excessively
use hardcoded tables. Not until the introduction of the Xanthia Templating Engine
in Postnuke 0.8 will it be possible to make your site accessible for everyone.
Then you can start developing accessible templates for all API-compliant modules,
something which is currently possible only with third-party modules that use smarty, like
PostCalendar or pnCommerce.
Until then the possibilities are limited when it comes to making at least some of your content
accessible: The AvantGo module - originally designed to make the News accessible
for PDAs - can also be used for accessibility. There seems to be an extended
version of the Avantgo named Extravantgo, but during my researches the download
page was inaccessible ;-)
German version of this article: post-nuke.net
Generated on October 8, 2003.
-
Interview: Chuck Steel
(News)
-
What module(s) are you working on?
I have written several modules myself that are publicly available including the Steel Knowledge Base, a simple database module and a task manager. I have also written some modules for work (our student technical support group uses PostNuke) and on a contract basis. My current project is a Reviews module that will include categories.
Where do you live?
East Berlin, PA.
What is your real-life job?
I coordinate technical support for the students at Gettysburg College, which means that I run our student helpdesk.
Tell me about your postnuke "career".
I looked at some of the other systems available and PN seemed to have the most documentation for programming modules available. I prefer to be able to find information on my own, rather than asking for help, and that didn't seem as likely with some of the other systems. The documentation that was available for PN at least gave me a starting point. PN also seemed to have a very active user community.
When did you start working on your own module?
I can't remember when I started my first module. Sometime during the 2002-2003 school year, I guess.
What is your development like? Do other people help you? How do you work together? How big is the impact of the community on your development?
Most of my development is done alone. I have been using DreamWeaver but will switch to something else once my development machine becomes linux. When I program at home I generally sit in the living room (wireless, yay) and watch TV at the same time. We have done some group projects with varying success. Our best approach so far has been to have one person develop (and document) the API functions and then have someone else work on the other areas. I am very concerned with interface consistency, so breaking things up too much becomes difficult. The community is a wonderful resource, although there aren't a lot of active module developers in the forums, so if you run into something really difficult, you might be out of luck.
What is the biggest difficulty in your development? And why? Is it a Postnuke inherent problem?
Time. I actually find that the PN environment makes some of the development work a lot easier. Once you understand the pnHTML functions a lot of the work becomes much less cumbersome. I wish I could use them in all of my web projects now.
What features should the Postnuke .8 core have to simplify your work?
I find the permissions system very hard to work within. It works well for module access, but if you want to have permissions on individual items that are dynamic, the permissions table could grow very rapidly to an unmanageable size. I could also benefit from functions to work with groups. I have written functions to determine if a person is a member of a group, for instance, but if that type of function was in the pnAPI, life would be much simpler.
Better support for html output. Some of the pnHTML commands don't support all of the parameters for the given tag. One example of this is that URL doesn't support a target, which means that if I want a link to open in a new windows, I have to output the html for the url manually. If you are going to implement functions to output html, it should be reasonable to make those functions fully support the given tag.
The security settings where someone gets logged out after x days. I think that this should be based on my last login. If I login to a site everyday, then I don't think that I should be asked to login every so often. If I don't visit a site for a while, then maybe.
What should users of your module regard and what is the weakest/strongest point in your module?
I wish that users wouldn't complain about small bugs not being fixed in something that they are getting for free. I don't know if this is common amongst open source development or not. Also, I provide forums on my pages to discuss problems and just like the forums on postnuke.com, no one bothers to check for previous threads that might help them. And my forums
aren't even that big, most of them don't even go to a second page!
Anything else you always wanted to say about Postnuke/your module?
I really enjoy PostNuke. I use it on several sites and while I occaisonally have issues, it has made my life and work much better. Right now my biggest complaint is that there isn't a paypal donations button on the postnuke site. I would love to throw a few bucks towards the development efforts, even if no one is throwing any my way.
Thank you very much for you time.
No, thank you.
Generated on September 18, 2003.