Android (14)

Why is Google in charge of Android?

Launching a software platform is complex. Openness is vital to the long-term success of a platform, since openness is required to attract investment from developers and ensure a level playing field. However, the platform itself must also be a compelling product to end users.

That's why Google has committed the professional engineering resources necessary to ensure that Android is a fully competitive software platform. Google treats the Android project as a full-scale product development operation, and strikes the business deals necessary to make sure that great devices running Android actually make it to market.

By making sure that Android is a success with end users, we help ensure the vitality of Android as a platform, and as an open-source project. After all, who wants the source code to an unsuccessful product?

Google's goal is to ensure a successful ecosystem around Android, but no one is required to participate, of course. We opened the Android source code so anyone can modify and distribute the software to meet their own needs.


How does the AOSP relate to the Android Compatibility Program?

The Android Open-Source Project maintains the Android software, and develops new versions. Since it's open-source, this software can be used for any purpose, including to ship devices that are not compatible with other devices based on the same source.

The function of the Android Compatibility Program is to define a baseline implementation of Android that is compatible with third-party apps written by developers. Devices that are "Android compatible" may participate in the Android ecosystem, including Google Play; devices that don't meet the compatibility requirements exist outside that ecosystem.

In other words, the Android Compatibility Program is how we separate "Android compatible devices" from devices that merely run derivatives of the source code. We welcome all uses of the Android source code, but only Android compatible devices — as defined and tested by the Android Compatibility Program — may participate in the Android ecosystem.


What kinds of devices can be Android compatible?

The Android software can be ported to a lot of different kinds of devices, including some on which third-party apps won't run properly. The Android Compatibility Definition Document (CDD) spells out the specific device configurations that will be considered compatible.

For example, though the Android source code could be ported to run on a phone that doesn't have a camera, the CDD requires that in order to be compatible, all phones must have a camera. This allows developers to rely on a consistent set of capabilities when writing their apps.

The CDD will evolve over time to reflect market realities. For instance, the 1.6 CDD only allows cell phones, but the 2.1 CDD allows devices to omit telephony hardware, allowing for non-phone devices such as tablet-style music players to be compatible. As we make these changes, we will also augment Google Play to allow developers to retain control over where their apps are available. To continue the telephony example, an app that manages SMS text messages would not be useful on a media player, so Google Play allows the developer to restrict that app exclusively to phone devices.


How is the Android software developed?

Each platform version of Android (such as 1.5, 1.6, and so on) has a corresponding branch in the open-source tree. At any given moment, the most recent such branch will be considered the "current stable" branch version. This current stable branch is the one that manufacturers port to their devices. This branch is kept suitable for release at all times.

Simultaneously, there is also a "current experimental" branch, which is where speculative contributions, such as large next-generation features, are developed. Bug fixes and other contributions can be included in the current stable branch from the experimental branch as appropriate.


What is involved in releasing the source code for a new Android version?

Releasing the source code for a new version of the Android platform is a significant process. First, the software gets built into a system image for a device, and put through various forms of certification, including government regulatory certification for the regions the phones will be deployed. It also goes through operator testing. This is an important phase of the process, since it helps shake out a lot of software bugs.


Once the release is approved by the regulators and operators, the manufacturer begins mass producing devices, and we turn to releasing the source code.

Simultaneous to mass production the Google team kicks off several efforts to prepare the open source release. These efforts include final API changes and documentation (to reflect any changes that were made during qualification testing, for example), preparing an SDK for the new version, and launching the platform compatibility information.

Also included is a final legal sign-off to release the code into open source. Just as open source contributors are required to sign a Contributors License Agreement attesting to their IP ownership of their contribution, Google too must verify that it is clear to make contributions.

Starting at the time mass production begins, the software release process usually takes around a month, which often roughly places source code releases around the same time that the devices reach users.


Why are parts of Android developed in private?

It typically takes over a year to bring a device to market, but of course device manufacturers want to ship the latest software they can. Developers, meanwhile, don't want to have to constantly track new versions of the platform when writing apps. Both groups experience a tension between shipping products, and not wanting to fall behind.

To address this, some parts of the next version of Android including the core platform APIs are developed in a private branch. These APIs constitute the next version of Android. Our aim is to focus attention on the current stable version of the Android source code, while we create the next version of the platform as driven by flagship Android devices. This allows developers and OEMs to focus on a single version without having to track unfinished future work just to keep up. Other parts of the Android system that aren't related to application compatibility are developed in the open, however. It's our intention to move more of these parts to open development over time.


What kind of open-source project is Android?

Google oversees the development of the core Android open-source platform, and works to create robust developer and user communities. For the most part the Android source code is licensed under the permissive Apache Software License 2.0, rather than a "copyleft" license. The main reason for this is because our most important goal is widespread adoption of the software, and we believe that the ASL2.0 license best achieves that goal.


Do all the Activities and Services of an application run in a single process?

All Activities and Services in an application run in a single process by default. If needed, you can declare an android:process attribute in your manifest file, to explicitly place a component (Activity/Service) in another process.


What does “compatibility” mean?

We define an "Android compatible" device as one that can run any application written by third-party developers using the Android SDK and NDK. We use this as a filter to separate devices that can participate in the Android app ecosystem, and those that cannot. Devices that are properly compatible can seek approval to use the Android trademark. Devices that are not compatible are merely derived from the Android source code and may not use the Android trademark.

In other words, compatibility is a prerequisite to participate in the Android apps ecosystem. Anyone is welcome to use the Android source code, but if the device isn't compatible, it's not considered part of the Android ecosystem.


CakePHP (18)

List some database related functions in cakephp.

find, findAll , findAllBy , findBy , findNeighbours and query.


What is the naming convention in cakephp?

Table names are plural and lowercased,model names are singular and CamelCased: ModelName, model filenames are singular and underscored: model_name.php, controller names are plural and CamelCased with *Controller* appended: ControllerNamesController, controller filenames are plural and underscored with *controller* appended: controller_names_controller.php.


List some of the features in Cake php.

  1. Compatible with versions 4 and 5 of PHP
  2. MVC architecture
  3. Built-in validations
  4. Caching
  5. Scaffolding


What is a component,helper and why are they used, is there other way we can do same thing, what is better.

A component is an independent piece of code written for specific task that can be used by calling in controllers (example : email component), helper is used for helping cakephp in rendering the data to be shown to user with views, these only adds to modularity in code otherwise same coding can be implemented in conrollers.


Can you remember what is the directory structure when you download cakephp?

o config/
o controllers/
o models/
o plugins/
o tmp/
o vendors/
o views/
o webroot/
* cake/
o config/
o docs/
o libs/
* vendors/


What is a Component in cakephp?

Components are packages of logic that are shared between controllers. They are useful when a common logic or code is required between different controllers.


Why cakephp have two vendor folder?

There is two vendor folder, one folder in root and another is in “app” folder


How can you include a javascript menu throughout the site. Give steps.

By adding the javascript files in webroot and call them in default views if needed everywhere or just in the related veiws.


What are commonly used components of cakephp?

  1. Security
  2. Sessions
  3. Access control lists
  4. Emails
  5. Cookies
  6. Authentication
  7. Request handling


If you have to validate a registration module for a user, what all can be possible ways , which one is the best?

Can be done on submission in controller, or using javascript/ajax while user is still filling the data. second option is better.


Cpanel (87)

How can I put the Change Language icon in cPanel’s Preferences section?

Select the Change Language option for that account's Feature List.


How do I change the 401 error that is caused when I cancel a username/password login window for a protected directory?

To change the error message that a user receives, use cPanel's Error Pages interface (Home >> Advanced >> Error Pages). Choose the domain for which you wish to modify the error pages.

Select any of your error pages to make your changes.


Some services (like MySQL) do not start on reboots. Why do I get errors about create/write to file (Errcode: 13) in the /tmp file?

This is most likely due to improper permissions on the real /tmp directory.

If you use the /scripts/securetmp script at boot time, you may not notice the problem because the script sets permissions correctly after it boots.

The most common error that you will see related to this is that the mysqld daemon will not start with errors that resemble the following example:

061113 00:14:46 mysqld started 
/usr/sbin/mysqld: Can't create/write to file '/tmp/ibEkcOgQ' (Errcode: 13) 
061113 0:14:47 InnoDB: Error: unable to create temporary file; errno: 13 
061113 0:14:47 [ERROR] Can't init databases 
061113 0:14:47 [ERROR] Aborting 
061113 0:14:47 [Note] /usr/sbin/mysqld: Shutdown complete 
061113 00:14:47 mysqld ended

To fix this, unmount the  /var/tmp and  /tmp  partitions and set the permissions correctly on the real  /tmp  directory. To do this, perform the following steps:

Run the following commands:

umount /var/tmp
umount /tmp
chmod 1777 /tmp

Edit the  /etc/rc.sysinit  file and add the following line near the other references to the  /tmp  directory:

chmod 1777 /tmp

Then you can reenable the  /scripts/securetmp script.

If you have trouble with other services, confirm that they are enabled with the  chkconfig –add pure-ftpd  command.

If you still receive messages after each reboot from the  chkservd  daemon about services that are not down, perform the following steps:

Disable the service with the  chkconfig command. 
Add the service to the end of  /etc/rc.local  instead, to ensure that other services have time to start up first.


How do I delete the mail statistics logs on a daily basis?

Mail statistics are stored in a MySQL database that is located in the /var/lib/mysql/eximstats file. You will need to remove the entries from this database to clean it up.

Alternatively, you must clear the mail logs in the /var/logexim_mainlogexim_rejectlog, and exim_paniclog files daily.

A cronjob can easily execute a script that clears either of these daily.


How can I create a demo version of cPanel & WHM?

To create a demo version of cPanel & WHM, perform the following steps:

  1. Create a new "dummy" account in WHM. You can use a fake domain name.
  2. Use branding to modify the account with your company's logo and look.
  3. Access WHM's Manage Demo Mode interface (Home >> Account Functions >> Manage Demo Mode).
  4. Select the account that you wish to turn to demo mode.
  5. Click Modify.
  6. Click Enable.


How do I fix the License File Expired error?

Your server needs to be able to communicate with the license servers. To confirm that your server's main IP address matches the IP address that is stored in cPanel's license servers, perform the following steps:

Run the following command as the root user:

curl http://www.cpanel.net/apps/myip/

If the IP addresses do not match, you will need to perform one of the following actions:

Change the routing in your server and network to route outbound traffic from the IP address that is licensed.

Change the IP address on the license to match the IP address returned by the curl command.

Check your license on http://verify.cpanel.net to confirm that it is valid. If your license is not valid, contact your license provider.

If your license is valid, run the following commands as the root user:

rdate -s rdate.cpanel.net

Confirm that your server queries the root nameservers and has a valid hostname. If you need assistance with this, contact your hosting provider.

If these steps did not fix the issue, contact your license provider.


How do I preview a new domain before the DNS switch makes it live?

You can preview the domain with the server's IP address and your cPanel username.


How do I stop the “There is a problem with this website’s security certificate” message when a user logs in to cPanel?

In the Manage Service SSL Certificates interface (Home >> Service Configuration >> Manage Service SSL Certificates), you can change the certificates for cPanel & WHM, webmail, your mail servers, etc. You must replace the self-signed certificate with one trusted by the common browsers.

To do this, purchase an SSL certificate through WHM for your hostname in the Purchase & Install SSL Certificate interface (Home >> SSL/TLS >> Purchase & Install SSL Certificate).


Why won’t the homepage of a folder automatically default to index.php?

There are a few lines in the /usr/local/apache/conf/httpd.conf file that allow for a index.php file to display automatically. This will resemble the following example:

# DirectoryIndex: Name of the file or files to use as a pre-written HTML # directory 
index.  //Separate multiple entries with spaces.
# <IfModule mod_dir.c>    DirectoryIndex index.ppl 
index.pl index.plx index.perl index.html index.wml index.cgi 
index.shtml index.jsp index.js index.jp index.php4 index.php3 
index.php index.phtml index.htm default.htm default.html 
home.htm </IfModule>

If those lines are not present, you will need to add the following line into a .htaccess file:

DirectoryIndex index.php

For more information about .htaccess files, visit the Apache website.


Is cPanel compatible with mod_security?

You can install the mod_security module through the EasyApache (Apache Update) interface (Home >> Software >> EasyApache (Apache Update)).


CSS (73)

Can CSS be used with other than HTML documents?

Yes. CSS can be used with any structured document format. e.g. XML, however, the method of linking CSS with other document types has not been decided yet.


What is CSS?

CSS is the language for describing the presentation of Web pages, including colors, layout, and fonts. It allows one to adapt the presentation to different types of devices, such as large screens, small screens, or printers. CSS is independent of HTML and can be used with any XML-based markup language. The separation of HTML from CSS makes it easier to maintain sites, share style sheets across pages, and tailor pages to different environments. This is referred to as the separation of structure (or: content) from presentation.


How Do you Stretch a Background Image in a Web Page?

The best way to stretch an image to fit the background of a page is to use the CSS3 property background-size :

body {
  background: url(bgimage.jpg) no-repeat;
  background-size: 100%;

According to caniuse.com it works in IE 9+, Firefox 4+, Opera 10.5+, Safari 5+, Chrome 10.5+, and on all the major mobile browsers.


What is selector?

CSS selector is equivalent of HTML element(s). It is a string identifying to which element(s) the corresponding declaration(s) will apply and as such the link between the HTML document and the style sheet.

For example in P {text-indent: 10pt} the selector is P and is called type selector as it matches all instances of this element type in the document.

In P, UL {text-indent: 10pt} the selector is P and UL (see grouping); in .class {text-indent: 10pt} the selector is .class (see class selector).


How can I create a variable-width container without a table?

Unfortunately, this is one situation where browser support isn't consistent. This is an effect of tables themselves, so Web browsers should act this way when you set the display to "table" ie:

<div style="background:#cfc;border:double #c8c 5px;padding:0 1em; display: table;"> 

When rendered, this box is exactly as wide as it needs to be.

But Internet Explorer doesn't render it correctly (Firefox, Safari, and Opera do).

According to the IEBlog "display:table is not part of the IE7 release. We know it is a highly requested feature and it is on our "to do" list."

One thing to remember however, is that this is a fairly rare occurrence that you would want the block to vary with the width of the content. If you have a design that requires that functionality and you can't get around it by setting percentage widths or other functions, then you should use a table. But this is not a good enough reason to refuse to move to CSS for layout.


What is cascade?

Cascade is a method of defining the weight (importance) of individual styling rules thus allowing conflicting rules to be sorted out should such rules apply to the same selector. 

Declarations with increased weight take precedence over declaration with normal weight:

P {color: white ! important}  /* increased weight */
P (color: black} /* normal weight */


Why Do Browsers Allow Duplicated IDs on the Same Page

IDs Are Unique Per Page

IDs are supposed to be unique on a per-page basis. So HTML allows it to be defined universally because that's how it's supposed to be used. You use it as a site-wide identifier for portions of your page.

Many Browsers Will Display Broken or Bad HTML

Most browsers are forgiving and will allow lots of broken and invalid code. So, you can build tables and leave off all the end tags (/TD, /TR, /TABLE) and most browsers will still attempt to render the page. And in most cases will get the table right. But that doesn't mean that the page will validate or be viewed correctly in all browsers.


What is The ID?

The ID is a reference to a specific unique area on your web page. It is generally seen represented on your HTML web page as an enclosed DIV (division) block:

<div id="header">Title of the Page</div>
In the style sheet (CSS) the ID selector is referenced as #header and might look like this:
#header { position: relative; margin:0; padding:0;
	height:100px; width: 100%; background: red;
	color: white;}


Isolate Your CSS Challenges

Identifying the parent/child relation influences over your web page layout helps to solve a lot of problems, but sometimes the relationships are so complex, it's hard to figure out which section is which and who has influence over which parts.

To isolate and identify your various CSS sections, divisions, and classes, here are some simple tricks. Before you begin, be sure and make a backup of all of your main files including your CSS to make sure you have something to recover from if this gets out of control.

Once you have identified the culprit and fixed it, make sure you remove these testing features so your web page will look "normal" again.


Box Your Sections

Once you have identified the various sections or divisions within your HTML page, go into your CSS file and add the following attribute to the various divisions:

border:solid 1px color

Where the word color is, put a different color name in place for each section.

For example:

#page { margin:5px; padding:0; border: solid 1px red; }
#header { margin: 10px; padding: 5px; border: solid 1px blue; }
#content { margin:5px 100px 5px100px; padding:10px;
	border: solid 1px green; }
.post { margin:5px; padding:10px; border: solid 1px yellow; }

Save the CSS file and view your page (click REFRESH or F5) in the web browser. You should now see a different colored box around each of the different sections:

This is a section of rambling text that goes on and on.

This is another section that has been highlighted in a red box.

This is the rest of the text back to normal.

If you don't see a colored box around your content, check again that the selector you changed is actually the correct spelling and identified in the HTML.

If the problem you are having is in the blue box, then you know where to start solving your problems. Be sure and remove the test attributes when you're done.

There are browser extensions and add-ons that offer this technique, too.


Highlight Sections

Besides putting boxes around the different sections to isolate the problem CSS or HTML, you can dramatically change the colors of the content to make the problem "jump" right out at you. By changing the text color or background color of a section, you will spot it immediately when you view the screen. Note: Be sure and make note of the original colors if you change them during testing so you can go back to them. And make frequent backups!

In the CSS file, you can change a section's font color by adding color:red or any other color to the selector's attributes such as:

H1 { font-style:bold; font-size: 125%; color: red; }

The H1 heading should jump out at you in bright red and would look like this:

To change the background color of a section, you can add background:pink to make the entire background pink.

#header { margin:5px; padding: 10px; background:pink; }

The result might look like this:

This is some text that goes on babbling here and there.

This is some text with the background color changed so you can see it.

This is the rest of the text back to normal.

The entire header division will now feature a pink background. When you've identified the culprit, and made the fixes, be sure and remove any testing attributes to restore the look of your web page.


Validate Your Source Code

Sometimes the smallest detail can send your page out of whack. A mispelled tag (rhef instead of href), a forgotten closing tag, a missing attribute, or even the wrong attribute can send your page into a design tail spin.

Free online validators which check your HTML, XML, and CSS code may help isolate the little detail you are missing. As you scan through the code, it's easy to skip over a little stumble. Most online validators let you either type in the URI (link) to your site to initate the validation process, or may even allow you to paste in code or upload a file to have it inspected. WordPress, by default, validates its default coding, but if you are making modifications, the slightest slip can screw things up.

Different validators check for different problems, so if you can't find your solution with one validator, try another. Many validators will even recommend making some changes, but find your problem before you start creating new ones.

To help you understand more about validation and to find online validators, we've provided a list of validation resources in a Codex article called Validating a Website.


Slash and Burn – The Last Resort


NOTE: There are two Slash and Burn techniques. If you are weak of heart, check out the second one.

If you can't seem to narrow down the problem, there is a technique, sometimes called "Slash and Burn", that will help you narrow down the culprit. It requires no interuptions, concentration and thorough backups to ensure you don't destroy even the screwed up remains of your web page design. We also recommend you have familiarity with HTML and CSS.

1. Make backups of all of your files.

2. Open a post in the web browser and VIEW > SOURCE.

3. Save this source file as a text document called "junk.html" to an empty test folder on your hard drive. DO NOT CLOSE THIS FILE. It will remain open during this entire process.

4. Copy your CSS file to the same test folder.

5. If you are having problems with the graphics, copy the graphics folder or the graphics to the test folder.

6. In the junk.html source file, change the style sheet reference from something like

<link rel="style sheet" type="text/css" href="wordpress/wp-content/themes/default/style.css">

to this:

<link rel="style sheet" type="text/css" href="style.css">
Save the junk.html text file (DO NOT CLOSE IT).

7. In the test folder, double click on junk.html to view the file in your browser. You should see the general layout of the page with the graphics, if appropriate. If not, double check the link reference to the style sheet.

8. In your junk.html text file, move to the point where the trouble begins. Move to the section above (a section which includes opening and closing tags such as:

<div class="post">babble...</div>
and highlight the entire section from the opening tag to the closing tag and CUT the section (Cntrl+X).

9. Save the file.

10. REFRESH the web page in the web browser (F5 or click REFRESH – if you have problems and don't see a change, hold the SHIFT key then press F5 or (in FireFox) simultaneously hold down Cntrl+Shift+R).

11. You should see the removed section missing. Check below to see if this fixed the problem or if it went away. If yes, this section is your problem. If not, go to the next step.

12. If the problem is still there, move back to the junk.html file and put the cursor in the place where you deleted the section, if the cursor has moved. PASTE the cut section back in (Cntrl+V). Move to another section above or below this point and repeat steps 8 through 12.

At some point in this process, you will see the problem either fix itself or disappear. Begin with large sections and when you find the large section problem area, break it up into smaller pieces. Eventually, you will isolate the area that is causing you grief. Note the CSS references to identify the troublesome section and start making changes to the CSS file to fix it.


Gentle Slash and Burn

To use the gentle version of slash and burn, instead of deleting the sections as shown above, cut and paste them into Notepad or another text editor so they are protected in case you get distracted from the cut and paste process. ALWAYS back everything up as you go along, just in case.


What does !important mean in CSS?

Cascading Style Sheets cascade. This means that the styles are applied in the order they are read by the browser. The first style is applied and then the second and so on. What this means is that if a style appears at the top of a style sheet and then is changed lower down in the document, the second instance of that style will be the one applied, not the first. For example, in the following style sheet, the paragraph text will be black, even though the first style property applied is red:

p { color: red; }
p { color: black; } 

The !important directive is a way to make your CSS cascade but also have the rules you feel are most crucial always be applied. A rule that has the !important directive will always be applied no matter where that rule appears in the CSS document. So if you wanted to make sure that a property always applied, you would add the !important property to the tag. So, to make the paragraph text always red, from the above example, you would write:

p { color: red !important; }
p { color: black; } 

User Style Sheets

However, the !important directive was also put in place to help web page users cope with style sheets that might make pages difficult for them to use or read. Typically, if a user defines a style sheet to view web pages with, that style sheet will be over-ruled by the web page author's style sheet. But if the user marks a style as !important, that style will overrule the web page author's style sheet, even if the author marks their rule as !important.

This is a change from CSS1 to CSS2. In CSS1, author !important directives took precedence over user !important directives. CSS2 changed this to make the user's style sheet have precedence.


HTML5 (14)

Have any HTML elements changed their meaning or how they are used?

Yes, but not many. The small element, which in HTML4 has no semantic value—it just means make the text smaller—is used in HTML5 to markup disclaimers, legal notices and the like—the small print. The anchor element, which creates hyperlinks, can now enclose any other elements excluding other links and buttons. In HTML4, the anchor was strictly an inline element.


Is HTML5 ready for prime time?

Some of it is and some of it isn’t. New HTML5 semantic elements have good support in all modern browsers, including IE if an HTML5 shim or the Modernizer JavaScript library is loaded into a web page. The audio, video and canvas elements are not supported in Internet Explorer yet, but these elements are designed to gracefully fail and fallback to other technologies, like Flash and Silverlight, in legacy browsers. Other technologies that are associated with HTML5 such as Mathematical Markup Language (MathML), Scalable Vector Graphics (SVG), Web Sockets, Web Storage and Geo-location have only limited support in the current crop of browsers.


Are there new HTML5 tags?

Yes, there are new HTML5 elements that provide richer semantic descriptions of documents: section, article, header, hgroup, footer, aside and nav; new media elements: audio, video and canvas; new form input types: email, url, number range and search; and a bunch of new element attributes.


Where can I get an HTML5 browser?

Opera, Chrome and Safari provide pretty solid support for HTML5 in their current versions including their browsers for iPhones, iPads and Droids. Firefox’s support for HTML5 is weak in its current version (3.6) but quite robust in the Firefox4 public beta.


What is new about HTML5?

Several things. The biggest change is that HTML5 documents are explicitly recognized as interactive applications. Every document element in HTML5 has a corresponding JavaScript API that describes how that element should behave in response to user actions and other events.


Is HTML5 a new technology?

No. It’s an extension of existing HTML, adding new elements to the set recognized by HTML4 level browsers and removing some of the restrictions of xhtml.


What exactly is HTML5 Video?

Nothing, really. The term HTML5 video is used to differentiate the playing of a video directly by a browser encountering a web page’s video element, as opposed to being played by a third-party browser plugin via an object or embed element. There is nothing intrinsic about any video that makes it HTML5-ish as opposed to Flash-ish. The distinction is entirely a matter of how the a web page is coded to present the video.


What about Internet Explorer?

Internet Explorer is late to the HTML5 party. There’s no HTML5 support in IE8 or previous versions. However, adding a JavaScript library such as Google’s HTML5 shim or Modernizer enables IE 6, 7 & 8 to recognize the new semantic level elements so they can be styled with CSS. HTML5 support is good in the beta version of IE9 which is available for Windows Vista and Seven users. Unfortunately, the Windows 7 mobile browser is built largely on the IE7 code base.


Is HTML5 video better than Flash video?

Yes, but not in terms of video quality which is a function of how the video data is encoded. HTML5 video is better because the video element can interact with other elements on the page and can be styled using CSS. Also, HTML5 video should use less resources because it is built into the browser.


How does HTML5 affect my existing HTML4 website?

It doesn’t. The HTML5 specifications require browser makers to support valid HTML4 web pages. You should update your HTML editing tools when new versions are available. If your web pages require a diet of strict xhtml, you should validate any third-party HTML5 code to one of the xhtml standards before embedding that code into your own pages.


Java (225)

How do I compare two strings?

A common error that we all make from time to time is incorrect String comparison. Even once you learn how to compare strings correctly, it's extremely easy to make a mistake and use the == operator.

When we compare primitive data types, such as two ints, two chars, two doubles, etc. we can use the == operator. We can also use the == operator to compare two objects. However, when used with an object, the == operator will only check to see if they are the same objects, not if they hold the same contents.

This means that code like the following will not correctly compare to strings :

if ( string1 == string2 )
	System.out.println ("Match found");

This code will only evaluate to true if string1 and string2 are the same object, not if they hold the same contents. This is an important distinction to make. Checking, for example, to see if
aString == "somevalue", will not evaluate to true even if aString holds the same contents.

To correctly compare two strings, we must use the .equals method(). This method is inherited from java.lang.Object, and can be used to compare any two strings. Here's an example of how to correctly check a String's contents :

if ( string1.equals("abcdef") )
	System.out.println ("Match found");

This is a simple, and easy to remember tip that will safe you considerable time debugging applications. Remember – never use the == operator if you only want to compare the string's contents.


Can I write objects to and read objects from a file or other stream?

In theory yes, but once again all the coding is up to you. There is no general method for doing this in Java 1.0. The problem is made harder by Java's security features that don't let you forge arbitrary byte streams into objects.

In Java 1.1 a serialization interface has been added to the language. However only objects that explicitly implement the java.io.Serializable interface can be serialized.


Why can’t my applet read or write to files?

Applets execute under the control of a web browser. Netscape and Internet Explorer impose a security restriction, that prohibits access to the local filesystem by applets. While this may cause frustration for developers, this is an important security feature for the end-user. Without it, applets would be free to modify the contents of a user's hard-drive, or to read its contents and send this information back over a network.

Digitally signed applets can request permission to access the local filesystem, but the easiest way around the problem is to read and write to remote files located on a network drive. For example, in conjunction with a CGI script or servlet, you could send HTTP requests to store and retrieve data.


How do I pass a primitive data type by reference? For example, how do I make an int passed to a function modifiable.

Java passes all primitive data types by value. This means that a copy is made, so that it cannot be modified. When passing Java objects, you're passing an object reference, which makes it possible to modify the object's member variables. If you want to pass a primitive data type by reference, you need to wrap it in an object.

The easiest of all is to pass it as an array (or even a Vector). Your array only needs to contain a single element, but wrapping it in an array means it can be changed by a function. Here's a simple example of it in action.

public static void increment(int[] array, int amount)
   array[0] = array[0] + amount;

public static void main(String args[])
   int[] myInt = { 1 };

   increment (myInt, 5);

   System.out.println ("Array contents : " + myInt[0]);

Of course, if you're modifying the contents of parameters passed to a method, you really should try to avoid this behavior. It increases the complexity of code, and really should be avoided. The preferred way is to return a value from a method, rather than modifying parameter values directly.


My application/applet loads images, but they aren’t drawn to the screen. What’s going on?

I've encountered this problem a few times in my own applications. When you load an image (using java.awt.Toolkit.getImage), the function returns immediately, and the image is loaded asynchronously. This means that sometimes an image isn't ready to be drawn, because it hasn't yet loaded. Depending on when the image is loaded, and when it is drawn, the problem can be intermittent and hard to track down.

If your application or applet must display the image, you can have it wait until the image is fully loaded. An animation applet, for example, may not have any useful work to do until the image(s) are loaded. To wait for images, you need to use the java.awt.MediaTracker class.

MediaTracker allows you to register an image with the tracker, and have your application or applet wait until the image is ready. Note that this isn't limited just to applets loading images over a network – from my own experience an application it can happen loading a small (<100 bytes) image from a local filesystem.

To register an image, you assign it an image number, and call the addImage method. Then you can call the waitFor(int) or waitForAll() methods.

// Pass media tracker any component (such as a canvas or an applet)
MediaTracker tracker = new MediaTracker( this );

// Add images
tracker.addImage ( myImage1, 0);
tracker.addImage ( myImage1, 1);
// Wait for images
try {
} catch (InterruptedException ie) {}

Once you start the wait, your application will block until the image has loaded. Then, you can call java.awt.Graphics.drawImage to display the image to your applet or application.


When I load the page Netscape gives me a java.lang.ClassFormatError.

Something is mangling the .class file. Most likely the .class files were uploaded to the server as text or MacBinary rather than as raw binary data. Make sure you put your ftp program in binary mode before sending the files to the server.

The other possibility is that the web server is sending the file to clients as text rather than binary data. Make sure the web server is configured to send files that end in ".class" with a MIME type of application/octet-stream. Many web servers send files as type text/plain which often works but causes problems on a few servers. In particular, WebStar needs to change the action to "binary" and the MIME type to "application/octet-stream".

It's also possible on some platforms that Netscape just can't find the .class file; that is, it isn't in the directory where Netscape is looking for it. Technically, this isn't really a ClassFormatError, but this is how Netscape reports it on some platforms and versions.


Explain with an example how to insert javascript in php code.

JavaScript can be inserted by specifying the language as:

	<script language='javascript'>
	Code goes here


What is the difference between an applet and an application?

In simple terms, an applet runs under the control of a browser, whereas an application runs stand-alone, with the support of a virtual machine. As such, an applet is subjected to more stringent security restrictions in terms of file and network access, whereas an application can have free reign over these resources.

Applets are great for creating dynamic and interactive web applications, but the true power of Java lies in writing full blown applications. With the limitation of disk and network access, it would be difficult to write commercial applications (though through the user of server based file systems, not impossible). However, a Java application has full network and local file system access, and its potential is limited only by the creativity of its developers.


Does Java have pointers?

No, no, a thousand times no. Java does not have pointers, no way, no how, the daily email I get from people who think differently not withstanding.

Java does have references. A reference is an abstract identifier for an object. It is not a pointer. A reference tags a particular object with a name in the Java virtual machine so that the programmer may refer to it. How exactly the virtual machine implements references at the level of machine code is VM-dependent and completely hidden from the programmer in any case. Most VMs including Sun's use handles, not pointers. A handle is a pointer to a pointer. At the level of machine code in the CPU a reference is an address in memory where the address of the object is stored. This way the objects can be moved around in memory and only the master pointer needs to be updated rather than all references to the object. This is completely hidden from the Java programmer, though. Only the implementer of the virtual machine needs to worry about it. Indeed, this is not the only way references can be implemented. Microsoft's VM actually does use pointers rather than handles. Other schemes are possible.


What does the ‘extends’ keyword mean?

Java, like other object-orientated languages, supports class inheritance. Inheritance allows one class to "inherit" the properties of another class. For example, all Java objects are inherited from the java.lang.Object class. This means that we can call the toString() method inherited from java.lang.Object, and get a string representation of any java object, such as an Integer, a Float, a Double, etc.

Take a look at the following example, which demonstrates the use of the 'extends' keyword.

public class A extends java.lang.Object {
	public int number;

	public String toString() {
		return new String("Value : " + number);

In this example, we implicitly state that we extend java.lang.Object, and override the functionality of the toString() method by providing our own function. Note that all classes, whether they state so or not, will be inherit from java.lang.Object.

Our next example shows a more common use of the keyword 'extends'. In this example, we inherit from class A, which means that B will also contain a field called number, and a function called toString().

public class B extends A {
	public void increment() {

public class ABDemo {

	public static void main (String args[]) {
		// Create an instance of B
		B counter = new B();

		// Increment B

		// Call toString() method
		System.out.println ( counter.toString() );

Even though we never defined a toString() method, or added a number field to the B class, it has inherited this information from A. This is a powerful feature of object-orientated programming, and can save significant time when developing classes.


Joomla (200)

To customise the information shown in the Login Form module

The information shown in the Login Form module can be customised from the Module Edit screen. The following list describes the various settings that will change the appearance of the Login Form module.

  • Title: Changes the title shown for the Login Form module if Show Title is set to Yes. The default is "Login Form".
  • Show Title:
    • If Yes then the Title will be shown at the top of the Login Form. This is the default.
    • If No then the Title will not be shown at the top of the Login Form.
  • Pre-text: This text will be shown above the Login Form but below the Title. It may contain HTML markup.
  • Post-text: This text will be shown below the Login Form. It may contain HTML markup.
  • Greeting:
    • If Yes then a simple greeting message is shown above the Logout button once the user is logged in. For example, it might say "Hi, Joe Bloggs". This is the default.
    • If No then no greeting message is shown above the Logout button.
  • Name/Username: Determines whether the user's real name or the user's username is shown as part of the simple greeting message.
Additionally, the "Create an account" link will only be shown if the Allow User Registration field in Global Configuration is set to Yes.


How is ‘Most Reviewed’ list calculated?

Extensions with the highest number of reviews are listed in Most Reviewed.


Why does the Back-End session stay alive even though I set it to expire?

When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:
  • If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.
  • Due to the risk of Cross-Site Request Forgery attacks (CSRF) it's never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it's remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.


What should I do if I find a possible violation of this license?

You should report the possible violation to the appropriate copyright holders. If you believe someone is violating the EDL license of the people who wrote the documentation for the Joomla! project please report the violation by e-mail to license@opensourcematters.org


Only one edit window! How do you create “

This is now implemented by inserting a tag (button is in the editor area) a dotted line appears in the edited text showing the split location for the "Read more…". A new bot takes care of the rest.

It is worth mentioning that this does not have a negative effect on migrated data from older sites. The new implementation is fully backward compatible.


Why isn’t un-publishing a vulnerable extension enough to protect my site?


Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension's files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.

Directions for removing a vulnerable extension

1. Make a list of files to remove

If you can locate it, read the extension's xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:

2. Uninstall via the Joomla Installer:

Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.

3. Check that the uninstall process was complete:

Don't trust the extension to safely remove all of it's files. Compare directories and files on your system to the extension's xml list to ensure that all related files were actually removed.

4. Optionally, remove related database tables:

Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension's xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)


How can I get permission to make printed copies?

You must formally request permission from the authors. Granting of such permission is not automatic and will be subject to a separate license.


How do you set parameters for articles and other content items?

In Joomla!, many Article parameters, such as Show Title, Show Author, and so on, can be set in three places:

  • The individual article (the Article:[Edit] screen)
  • The menu item (Menu Item:[Edit] screen)
  • Global parameters (Article Manager / Options)

Typically, parameters at the individual article and menu item levels can be set to a specific value or to a value of "Use Global". If the individual article's parameter is set, then that value controls the setting. If this is set to "Use Global" then the menu item parameter is checked. If the menu item is set to a specific value, that value is used. If the menu item is set to "Use Global", then the global parameter setting is used.

A similar hierarchy is used for other content items, such as Banners, Contacts, News Feeds, and Web Links.


Is the Joomla! community a democracy?

Generally speaking, the Joomla! community is not a democratic organization and it has never presented itself as such. Occasionally, the Core Team asks the community to vote on things as a whole but this tends to be a pretty rare event. However, the community’s input and feedback are welcome and carefully listened to.


How can you help the extension submission process?

There are several ways you can help the extension submission process go faster and smoother. As you may know, the Joomla! Extension Directory is supported by volunteers and it takes time to go through all the extensions. To make things easier:

  • Make sure your download link leads directly to the download page. It makes downloading and testing the extension a whole lot easier.
  • Make sure a front-end/public/guest user can actually download the extension.
  • Test your extension to make sure the package can be installed.
  • If you have use the Joomla! logo anywhere, make sure it follows the logo guidelines.
  • If you need to make changes to your extension listing and it has not been published, do not submit another application. Removing duplicates takes up precious time. Instead, either email your changes to team@extensions.joomla.org with detailed information about your extension or wait until your extension is published.


Magento (57)

What Is an Easy Way of Converting Magento Simple Products into Configurable?

Setting up product catalog with Magento you have abundance of tailor-fit features at your disposal, one of which is the possibility to easily create and efficiently manage different types of Magento products at your store. Indicating appropriate product class is significant for accessing apt feature set required to sell your goods.
It’s very important to correctly define what class this or that product will belong to before adding it to Magento product list. Not infrequently, having created/uploaded some items to Magento, you come to the conclusion, that they should refer to different type – let’s say, you have added products as simple, but need them to be configurable ones. For example, you are selling clothing and need to create different options of certain item for customers to choose between (size, color). You, as store owner, can develop more flexible system of inventory control, while your customers will be able to easily find the product they will be looking for.
Thus, the item on the agenda is “How to convert simple products into configurable not messing things up?” Will you prefer to re-add all the entities and specify details? Surely, it will be time-consuming and cumbersome process. It’s also possible to edit database tables and change Magento products type to needed one, what is quite risky, as you can damage Magento database.
Store Manager for Magento offers you a simpler and understandable way of converting simple products into configurables. Product type can be changed by means of corresponding option, available on Magento products toolbar or in the product context menu. Although, to make simple Magento item configurable, you should ensure that attribute set, the product belongs to, has configurable attributes. For that proceed with the following:
Go to Store Manager Attributes section, and then find attribute set, associated to current Magento item in the left pane of Manage Attributes window. Check whether at least one Magento attribute included to this attribute set has Scope field set to “Global” and Catalog Input Type – to “Dropdown”. This is required, as you should have Magento attribute with options to create configurable product. You can create required attribute and assign it to appropriate attribute set in “Manage Attributes” section of the application.
What are further operations?
Having accomplished the preparations, go to Magento product list and select an item you want to convert to configurable.
Call up dialog box, clicking on Change Product Type icon and then select target product type from the drop-down list. Press Ok button to apply alteration.


In Type field of product grid you will see product class turned to configurable.
Just in several clicks you’ve got a configurable product, that can home wide scope of associated products that will create options for your customers. Thus, now you have to add simple products to just created configurable item. You may already have them created and available in Magento product list. To associate items to configurable product proceed with the following:
Select configurable product, then go to Store Manager lower grid and switch to Associated Products tab. On the toolbar/in the context menu you will find “Add associated product” button. Press it to open dialog box. Check boxes for items you want to associate to Magento configurable product. Press Ok button to fulfil the procedure.
On condition that simple Magento products have not been created yet, you can efficiently generate them with Store Manager functionality. Having chosen configurable Magento product and switched to corresponding tab of the lower grid you have, first of all, specify configurable attribute, on the basis of which associated products will be generated. Press “Select Configurable Attributes” button on the toolbar, check the box/boxes for necessary attribute/s and press Ok. Magento attributes being specified, resort to “Create Associated Products” option to generate required simple products.
Use alternative route of changing Magento product types with Store Manager for Magento application – avoid hours of tiresome product re-adding and create customizable product catalog.


What licenses does Magento use?

The Magento Community Edition is licensed under the Open Software License (OSL) v3.0, an open source certified license. More information about Magento's license can be found at http://www.magentocommerce.com/license/. The premium, Magento Enterprise Edition product is licensed under a commercial license.


How to install a Magento extension through the command line?

If you have SSH access to your web hosting account, you can easily install a Magento extension through the command line.

To do it, open an SSH connection to your account and enter the following command:

./pear install Magento_extension_key

In the above command line replace Magento_extension_key with the exact key for the chosen extension.

In the following example we show you how to install a classic theme extension through the command line:

./pear install magento-community/magento_classic_theme_free
downloading magento_classic_theme_free- …
Starting to download magento_classic_theme_free- (3,687,973 bytes)
…………………..done: 3,687,973 bytes
install ok: channel://connect.magentocommerce.com/community/magento_classic_theme_free-


Adding a new product in Magento

If you are building a store with more than one store view, you must understand the concept of attribute scope and how it is used for products and categories.

Note: Before you add products, define the complete sales tax rules you will be using. Correcting the tax class for each product afterwards may be extremely time-consuming.

Product Name

Enter the full product name. For a simple product, there will be no way to customize the product in any way. If you have several similar products. you need to differentiate their product names: “Large boxes”, “Medium boxes” etc. If you sell the same product in different packages, you may want to include the quantity in the product name, e.g. “Large boxes, 10-pack”.


Enter the long product description that is used in the detail section of the product page.

This field has some odd behaviors as it has a nl2br function that turns line endings to <br /> which can totally mess up things like table display. If you are using the WYSIWYG editor, you will probably edit the code to remove nl2br which will force re-edit of all your existing descriptions to use proper HTML for display.

Short Description

Enter the short product description that is used on the catalog page in list view, and as the Quick Overview on the product page.


In the SKU field (http://en.wikipedia.org/wiki/Stock_Keeping_Unit), enter the unique SKU for this product.


The Weight field is mandatory. If you don’t know the weight for this product, just enter 1.


The manufacturer attribute is a drop-down selector.

You need to go into attribute management, pull up the Manufacturer attribute and add values to the list so the drop-down will be populated.

It’s done this way so you don’t end up with “tag spew”, that unenviable property of user produced tag clouds where you have a properly spelled manufacturer name surrounded by every possible misspelling and anyone trying to do a search on that attribute never gets a full search result because the one item they want to find is in one of the misspelled tag collections.


Set the Status field to Enabled to ensure that the product is visible in the catalog. If a product runs out of stock, it will be assigned an Out-of-stock status until stock has been replenished. Use the Disabled status before introducing a new product, or after you’ve phased it out.

URL key

The URL key will be used in links to this product, if you’re not happy with just the product name. When sites are ranked in search results, it is considered an advantage to have as many keywords as possible in the URL. If your product is called “Large boxes”, you may want to set this field to “large-handmade-designer-boxes” to include two additional keywords in the link.


The Visibility setting determines whether a visitor can find this product by browsing the catalog, by searching for the product, or both.

Click on “Save And Continue Edit”. Note that the product is not visible in the catalog until it has been assigned to at least one website and category.

Enter your ordinary selling price for the product.

You may also enter your cost for purchasing the product.

Assign the correct Tax Class.

Use the Tier Price list to specify volume discounts.

Use the Special Price setting for campaigns. The Special Price is insensitive to volume and is used within the dates set by Special Price From Date and Special Price To Date. The Promotions tab in the Admin tool provides additional, more advanced price management options.

The Page Title is by default set to the name of the product. You may want to extend this to aid the user or a search engine, e.g. for a product called “Large boxes” you may want to use a title like “Large handmade designer boxes for bowling balls”.

The Meta Keywords and Meta Description are by default set to the site defaults, making them useless. You should at least copy the first 255 characters of the unique Description field for each product to its Meta Description field, since this helps search engines display a summary of the contents on the page. Many experts on search engine optimization consider Meta Keywords a thing of the past, and not worth a major effort. If you want to provide Meta Keywords, they should summarize each page by its most important keywords, separated by commas, e.g. “handmade boxes, large boxes, bowling ball boxes”. The Meta Keywords should be unique for each page.

Specify the location of the thumbnail image, small image and main image for this product. In the demo template, these images have the following sizes:

  • thumbnail: 50 x 50 pixels

  • small image 135 x 135 pixels

  • main image 1100 x 1100 pixels

Any images you upload will be scaled to the correct size, so you can use the same image in all three fields. However, if the template requires a particular aspect ratio, you should convert your images to this aspect ratio before you upload them, since they may become distorted otherwise.

The aspect ratio used by the demo template is 1:1, i.e. your product images should be square.

For the main image, a cute zooming feature is used on the main product page. For this feature to work properly, your product images should not be smaller than the size of the main image for the template.

Press Browse to locate and select each of the image files for this product. Press Upload Files to upload the selected files to the Magento server. Select which image to use in each situation (Thumbnail, Small image, Base image). Give each image a label, which will also be used as the Alt text for the image.

Magento inventory management is largely controlled by settings on the System > Configuration > (Catalog) Inventory tab. If you set Decrease Stock When Order is Placed to Yes, Magento keeps track of inventory by automatically maintaining the Quantity in Stock for each product.

In the Qty field for the product, enter the exact current quantity in stock, or a high value if you don’t keep track of inventory (System > Configuration > (Catalog) Inventory > Decrease Stock When Order is Placed is set to No).

Use the Minimum Qty for Item’s Status to be Out of Stock setting to define when the product enters an Out of Stock status and no longer can be ordered. If you sell the same products both online and in a regular store, you may want to set a certain threshold where online orders are no longer accepted even though you still have a minimal quantity in stock.

The Minimum and Maximum Qty Allowed in Shopping Cart setting prevents customers from ordering less than a designated minimum quantity, or more than a maximum quantity.

The Qty Uses Decimals setting determines whether decimals will be used in the quantity field for the product (e.g. “3.5 yards”) or not.

Enter Notify for Quantity Below. When a stock of any product goes below this level, Magento will automatically notify you viaRSS Feed. This ability works in conjunction with the Decrease Stock When Order is Placed drop-down above, because Magento cannot notify you of a low stock unless you also enable it to keep track of stock reduction. In this field, enter the quantity level at which Magento will send a notification. Note that the default of 0 disables out-of-stock >RSS notifications. In order to subscribe to the RSS feed, navigate to Catalog > Manage Products, and click the Notify Low Stock RSS link at the top of the page. You will be prompted to enter your User Name and Password. These are the same that you use to access the Magento admin panel. You will be redirected to the RSS page, where you can select which reader you would like to use for receiving this feed.

The Stock Availability setting shows you whether Magento considers the product in stock or not. If the Qty value is higher than the Minimum Qty for Item’s Status to be Out of Stock, you should ensure that Stock Availability is set to “In Stock”.

Select in what websites you want this product to be visible. Note that you must assign the product to one or more categories in each website before it appears in the catalog for that website.

Select in what categories the product will appear. Note that the settings on the Websites tab also affects the appearance of the product in each website.

Click on “Save And Continue Edit”. The product should now be visible in the stores and catalogs you have selected.


Why Open Source?

A recent report by O’Reilly Research on usage of Open Source in the enterprise, provides a number of reasons for the rise and meteoric growth of Open Source products, including: Agility and scale, reduced vendor lock-in, quality and security, cost, and innovation.


How will you log current collection’s SQL query?

$collection->printLogQuery(true); OR $collection->getSelect()->__toString();


How Should the Sample of CSV File for Magento Import Look Like?

Magento import to database is the most widespread medium of Magento store content management. It’s preeminent way of appending new products and information associated to them as well as previously disposed at Magento store data renewing. Magento data import is being characterized by bundles of marvellous functions, beneficial for Magento store owners, namely bulk product, image, category, etc upload, precise inventory management, product stock control and so on.
The most prevailing file format, used for Magento import, is csv. Though Magento import from csv is defined as the fastest and most workable way of data upload, it can be really tough nut to crack at times. Magento has strict system of requirements to file data structure, what has essential influence on overall csv to Magento import.
From this follows, to succeed in Magento import from csv and get correct results, you are obliged to smartly structurize comma-separated file. Notwithstanding you are going to update Magento store data or append new products to store database, you have to include certain fields to the file you will upload.
Make sure there are the following columns specified in the file:
SKU (unique product identification)
attribute_set (e.g Default, T-Shirts, Computers )
type (e.g simple, configurable)
status (e.g Enabled)
weight (put “1” if you do not use it)
tax_class_id (None or another tax class, listed in drop-down)
In the event if the file contained above enumerated fields, products will be added at backend after csv to Magento upload. To make them visible at frontend, you should include the following columns to file, used for Magento import:
visibility (Catalog, Search)
quantity (this field is obligatory in case you enabled product stock tracking in the administration area)
To carry out csv to Magento appending swimmingly, you should get well-rounded csv file. In what way to do it?
Create the file with required records by yourself. You can rely upon yourself and, keeping in mind, what fields are required for spotless Magento import from csv, add information to spreadsheet. This is quite a reliable way of csv file creating, although can be tedious and tiresome, especially in case you are going to perform Magento import of vast products amount.
Get file from vendors. You can ask wholesalers to adjust files, they are sending and make them perfect for Magento import. Although, you can’t be certain of file correctness, as suppliers, usually, have a lot of clients with different requirements and they are not eager to hang around file data structurizing.
Export data to the file. You can fall back upon data export to csv file. Having exported just one product, you get the file, including database columns, necessary for Magento import from csv. Nevertheless, the file exported again requires manual changes implementation, as the file, exported by default Magento import method, is not suitable for Magento import to database.
Thus, whatever method of file building up you prefer, you are about to face inconveniences, related to distinct system of requirements to Magento import file. To bypass the difficulties and simplify data upload performing, entrust it to Store Manager for Magento desktop application. With this solution you won’t be bound to rigid scheme of csv file organization and will have a possibility to input values immediately in the course of csv Magento import. In case some fields are missing in the file or improper values are specified, Magento user can easily improve the matters with Store Manager application. Furthermore, updating previously appended to database information, you are not obliged to include all the fields, listed above. Indicate only those fields, which you need to renew (e.g product price, quantity) and product identifier (SKU, Name, ID). One more advantage is that, the application supports the scheme “export file – bring changes to data – import data back to store”, what is unfamiliar for Magento admin import tool.


How do I determine how fast my pages load, and how can I compare my times to my competitors?

A non-tech person can use Google’s Page Speed Analyzer to check the page speed rating assigned by Google. There are several advantages to using this tool:

  • It’s Google’s test and Google uses page speed, in part, to determine search rankings
  • You can easily see how you compare to competitors by looking up their pages
  • You can input any page on your site to see how it performs (though it doesn’t always work well for checkout and cart because of coding that protects personal data from customers)
  • It produces a list of suggestions for you to implement in order to improve load time

Google has also added tools in Google Analytics and Webmaster Tools. All of these are accessible and easily understood by non-technical users.


Are some pages more important than others?

Are some pages more important than others?

In general you want your entire site to be fast because customers tend to abandon a site more often whenever any page takes too long to load. That being said, if your checkout pages are slow, it often becomes a question of trust with the shopper which can kill a transaction. The general consensus is to keep your checkout pages clean and simple to increase their speed.


Which version of Magento should we be using?

If you're more than 1 version behind the latest Magento release, you may be missing out on some important features or security patches if you are running an older version. Visit the Magento web site to see the latest version of Enterprise Edition. If you are more than one version behind, you should ask why.


Magento Go (14)

What Are Store Views and How Many May I Use For My Store?

Store views are used to support multiple languages in Magento. They can also be used to create different areas of the website that are styled differently, all under the same base URL. The number of languages supported by a plan are the number of store views that are available with that plan. Please refer to the Plans and Pricing page for details.


How do Add-ons Work?

Add-ons leverage Magento Go's web services Application Programming Interfaces (APIs) to seamlessly connect with our partners' systems to exchange information. The data is then imported from the partner directly into Magento Go's control panel for you to easily access.


Do You Charge a Set Up Fee for Magento Go?

No, Magento Go plans do not have any set up fees.


Can I Run Multiple Sites From a Single Store?

At present, you can run one website that is associated with a single base URL with each Go plan you purchase.


Can I Customize The Design of My Store?

Yes, Magento Go gives you lots of options for designing your store. You can start with one of many professional themes and then customize them to meet your needs. You can upload your own logo and images, edit the theme's CSS or even upload your own CSS file. You can even upload JavaScript blocks into your design. Magento Go makes it very easy to achieve your desired look and feel of your store without sacrificing functionality.


What is Magento Go?

Magento Go is an online service for entrepreneurs and small businesses that lets you build your own online store to sell your products and services online. Magento Go makes it easy for you to start selling quickly. You don't need to worry about servers and software. Magento Go handles everything for you.


Can I use My Own Domain?

Yes. Magento lets you customize your online store with your own domain name on any Magento Go plan. Once you have purchased a plan, you can add your own domain to your store through your Account Settings. Please follow the instructions in the Magento Go Knowledge Base to add your own domain to your Magento Go online store.


Which Payment Processors Do You Support?

Magento Go works with many different payment gateways including PayPal, Authorize.net, OGone, Sage Pay Direct, WorldPay and more. For a full list of payment gateways refer to our payment gateways page within the knowledge base or search by country on our gateways page. You can also configure your online store to accept alternative payment methods including check or money orders, cash on delivery or zero subtotal checkout. Our payment methods page lists all alternative payment methods for your reference. Magento is quickly adding many new payment processing and gateway options from around the world, so be sure to check these pages often to see what’s new with Magento Go.


Where can I Find Add-ons Once They Have Been Integrated?

After you've installed an Add-on, it will display in your control panel when you log on to manage your site.


What are Add-ons?

Add-ons are a group of marketing and business management products that you can easily integrate with your Magento Go online store. Add-ons were developed through our broad network of partners to give you the flexibility to build and maintain your store the way you want.


MySQL (116)

How to create database?

To create a new database, use the CREATE DATABASE statement. The following statement creates a database named db_name:


If you try to create a database that already exists, an error occurs. If you simply want to ensure that the database exists, add an IF NOT EXISTS clause to the statement:


The CREATE DATABASE statement has two optional clauses, CHARACTER SET and COLLATE, that assign a default character set and collation for the database. If given, they appear at the end of the statement following the database name. The following statement specifies that the mydb database has a default character set of utf8 and collation of utf8_danish_ci:


The default character set and collation for the database are used as the defaults for tables created in the database for which no explicit character set or collation of their own are specified. The database defaults are stored in the db.opt file in the database directory.


How to set conditions on query data with CASE construct?

Control flow functions enable you to choose between different values based on the result of an expression. The CASE construct is not a function, but it too provides flow control. It has two forms of syntax. The first looks like this:

CASE case_expr
  WHEN when_expr THEN result
  [WHEN when_expr THEN result] ...
  [ELSE result]

The expression case_expr is evaluated and used to determine which of the following clauses in the rest of the CASE to execute. The when_expr in the initial WHEN clause is evaluated and compared to case_expr. If the two are equal, the expression following THEN is the result of the CASE. If when_expr is not equal to case_expr, and there are any following WHEN clauses, they are handled similarly in turn. If no WHEN clause has a when_expr equal to case_expr, and there is an ELSE clause, the expression in the ELSE clause becomes the CASE result. If there is no ELSE clause the result is NULL. In the following example, CASE expression returns a string that indicates full name of language against each language_id available in the table:

mysql> SELECT CASE languageId
    ->        	WHEN 1 THEN 'English'
    ->         	WHEN 2 THEN 'French'
    ->         	WHEN 3 THEN 'Arabic'
    ->         	WHEN 4 THEN 'dutch'
    ->        ELSE 'Urdu'
    ->        END AS Language
    -> FROM language;
| Language |
| English  |
| French   |
| Arabic   |
| dutch    |
4 rows in set (0.02 sec)

The second CASE syntax looks like this:

  WHEN when_expr THEN result
  [WHEN when_expr THEN result] ...
  [ELSE result]

For this syntax, the conditional expression in each WHEN clause is executed until one is found to be true, and then its corresponding THEN expression becomes the result of the CASE. If none of them are true and there is an ELSE clause, its expression becomes the CASE result. If there is no ELSE clause the result is NULL.  The following CASE expression tests whether the value of the @val user variable is NULL or less than, greater than, or equal to 0:

mysql> SET @val = NULL;
    ->   WHEN @val IS NULL THEN '@val is NULL'
    ->   WHEN @val < 0 THEN '@val is less than 0'
    ->   WHEN @val > 0 THEN '@val is greater than 0'
    ->   ELSE '@val is 0'
    -> END AS result;
| result       |
| @val is NULL |


What are MySQL client programs?

In MySQL Client programs are programs that can be used for communicating with the server to manipulate the information in the databases that the server manages. MySQL AB provides several client programs. The following list describes a few of them:

  • MySQL Query Browser and MySQL Administrator are graphical front ends to the server.
  • mysql is a command-line program that acts as a text-based front end for the server. It's used for issuing queries and viewing the results interactively from a terminal window.
  • Other command-line clients include mysqlimport for importing data files, mysqldump for making backups, mysqladmin for server administration, and mysqlcheck for checking the integrity of the database files


How to change the default storage engine of MySQL?

The default storage engine can be changed at server startup or at runtime:

  • The default storage engine can be specified at server startup with the –default-storage-engine option.
  • For a running server, an administrator who has the SUPER privilege can change the default storage engine globally for all clients by setting the global storage_engine system variable:

    SET GLOBAL storage_engine = engine_name;

    Setting the storage engine this way affects any client that connects after the statement executes. Clients that are connected at the time of statement execution are unaffected.

  • Any client can change its own default storage engine by issuing either of these statements:

    SET SESSION storage_engine = engine_name;
    SET storage_engine = engine_name;


What are best practices to pick columns to index?

Indexes can play an important role in query optimization and searching the results speedily from tables. So it is most important step to select which columns to be indexed. There are two major places where we can consider indexing: columns referenced in the WHERE clause and columns used in JOIN clauses. In short, such columns should be indexed against which you are required to search particular records. Suppose, we have a table named buyers where the SELECT query uses indexes like below:

 buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal'   /* consider to use index */

Since "buyer_id" is referenced in the SELECT portion, MySQL will not use it to limit the chosen rows. Hence, there is no great need to index it. The below is another example little different from the above one:

 buyers.buyer_id, /* no need to index */
 country.name    /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
 first_name='Tariq' /* consider to use index */
 last_name='Iqbal' /* consider to use index */

According to the above queries first_name, last_name columns can be indexed as they are located in the WHERE clause. Also an additional field, country_id from country table, can be considered for indexing because it is in a JOIN clause. So indexing can be considered on every field in the WHERE clause or a JOIN clause.

The following list also offers a few tips that you should always keep in mind when intend to create indexes into your tables:

  • Only index those columns that are required in WHERE and ORDER BY clauses. Indexing columns in abundance will result in some disadvantages. To learn about indexing disadvantages visit advantages and disadvantages of indexes?
  • Try to take benefit of “index prefix” or “multi-columns index” feature of MySQL. If you create an index such as INDEX(first_name, last_name), don’t create INDEX(first_name). However, “index prefix” or “multi-columns index” is not recommended in all search cases. To learn more about “multi-colums index” visit When does multi column index come into use?
  • Use the NOT NULL attribute for those columns in which you consider the indexing, so that NULL values will never be stored.
  • Use the –log-long-format option to log queries that aren’t using indexes. In this way, you can examine this log file and adjust your queries accordingly.
  • The EXPLAIN statement helps you to reveal that how MySQL will execute a query. It shows how and in what order tables are joined. This can be much useful for determining how to write optimized queries, and whether the columns are needed to be indexed.


How to use string expressions in MySQL?

Literal strings in expressions are written as quoted values. By default, either single quotes or double quotes can be used, although single quotes are more standard. Also, if the ANSI_QUOTES SQL mode is enabled, double quotes are interpreted as identifier-quoting characters, so literal strings can be quoted only with single quotes.

The data types for representing strings in tables include CHAR, VARCHAR, BINARY, VARBINARY, and the TEXT and BLOB types. You choose which type to use depending on factors such as the maximum length of values, whether you require fixed-length or variable-length values, and whether the strings to be stored are non-binary or binary. Direct use of strings in expressions occurs primarily in comparison operations. Otherwise, most string operations are performed by using functions.

The usual comparison operators apply to string values (=, <>, <, BETWEEN, and so forth). The result of a comparison depends on whether strings are non-binary or binary and, for non-binary strings that have the same character set, on their collation. (A comparison between strings that have different character sets typically results in an error.)

String concatenation is done with the CONCAT() function:

mysql> SELECT CONCAT('abc','def',REPEAT('X',3));
| CONCAT('abc','def',REPEAT('X',3)) |
| abcdefXXX                         |

The || operator is treated as the logical OR operator by default, but can be used for string concatenation if you enable the PIPES_AS_CONCAT SQL mode:

mysql> SELECT 'abc' || 'def';
| 'abc' || 'def' |
|              0 |

mysql> SET sql_mode = 'PIPES_AS_CONCAT';

mysql> SELECT 'abc' || 'def';
| 'abc' || 'def' |
| abcdef         |

In the first SELECT statement, || performs a logical OR operation. This is a numeric operation, so MySQL converts the strings in the expression to numbers first. Neither looks like a number, so MySQL converts them to zero, which is why there is a warning count of two. The resulting operands for the operation are zero, so the result also is zero. After PIPES_AS_CONCAT is enabled, || produces a string concatenation instead.

There are several functions take string arguments or return string values. Some types of operations these functions can perform are to convert lettercase, calculate string lengths, or search for, insert, or replace substrings.


Error 1251: Client does not support authentication protocol requested by server

Database admin user name and/or password is invalid (Error 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client).
MySQL 4.1 introduced a new password hashing algorithm that older versions of Apache (1.x) and PHP (3.x and 4.x) don't support. For more information about the new password hashing algorithm in MySQL, see http://dev.mysql.com/doc/mysql/en/old-client.html.

There are multiple ways to workaround the error that you're seeing, including upgrading pieces of the architecture, or modifying MySQL to utilize the old password hashing algorithm.

One quick workaround is to issue the following MySQL query:
SET PASSWORD FOR 'username'@'localhost' = OLD_PASSWORD('new_password_here');


How to validate user login in case sensitive manner?

MySQL provides more than one method to do so:

  • You can set your concerned column's COLLATION to latin_general_cs.
  • If you don't like above, you can force MySQL to check for an exact case. For this you can use the BINARY keyword in your query. Simply place BINARY before the column you want to compare. Take an example:
SELECT * FROM user WHERE BINARY username = 'Adnan' AND password = 'pw12345';


How to manage case sensitivity in string comparisons?

String comparisons are somewhat more complex than numeric or temporal comparisons. Numbers sort in numeric order and dates and times sort in temporal order, but string comparisons depend not only on the specific content of the strings, but on whether they are non-binary or binary. A letter in uppercase may compare as the same or different than the same letter in lowercase, and a letter with one type of accent may be considered the same or different than that letter with another type of accent. Here is a summary:

  • A non-binary string contains characters from a particular character set, and is associated with one of the collations (sorting orders) available for the character set. Characters may consist of single or multiple bytes. A collation can be case insensitive (lettercase is not significant), case sensitive (lettercase is significant), or binary (comparisons are based on numeric character values).
  • A binary string is treated as raw bytes. It has no character set and no collation. Comparisons between binary strings are based on numeric byte values.

The rules that govern string comparison apply in several ways. They determine the result of comparisons performed explicitly with operators such as = and <, and comparisons performed implicitly by ORDER BY, GROUP BY, and DISTINCT operations.

The default character set and collation for literal strings depend on the values of the character_set_connection and collation_connection system variables. The default character set is latin1. The default collation is latin1_swedish_ci, which is case insensitive as indicated by the "_ci" at the end of the collation name. Assuming these connection settings, literal strings are not case sensitive by default. You can see this by comparing strings that differ only in lettercase:

mysql> SELECT 'Hello' = 'hello';
| 'Hello' = 'hello' |
|                 1 |

A given collation might cause certain accented characters to compare the same as other characters. For example, 'ü' and 'ue' are different in the default latin1_swedish_ci collation, but with the latin1_german2_ci collation ("German phone-book" collation), they have the same sort value and thus compare as equal:

mysql> SELECT 'Müller' = 'Mueller';
| 'Müller' = 'Mueller' |
|                    0 |

mysql> SET collation_connection = latin1_german2_ci;

mysql> SELECT 'Müller' = 'Mueller';
| 'Müller' = 'Mueller' |
|                    1 |

For binary strings, lettercase is significant. However, this is not because binary strings are case sensitive per se, because binary strings have no character set. Rather, it is because uppercase and lowercase versions of a character have different numeric values.  A non-binary string can be treated as a binary string by preceding it with the BINARY keyword. If either string in a comparison is binary, both strings are treated as binary:

mysql> SELECT BINARY 'Hello' = 'hello';
| BINARY 'Hello' = 'hello' |
|                        0 |

mysql> SELECT 'Hello' = BINARY 'hello';
| 'Hello' = BINARY 'hello' |
|                        0 |

The sorting principles just described were demonstrated using literal strings, but the same principles apply to string-valued table columns. Suppose that a table t contains a column c and has the following rows:

mysql> SELECT c FROM t;
| c         |
| Hello     |
| goodbye   |
| Bonjour   |
| au revoir |

If c is a CHAR column that has the latin1_swedish_ci collation, it is a non-binary column with a case-insensitive collation. Uppercase and lowercase letters are treated as identical and a sort operation that uses ORDER BY produces results like this:

mysql> SELECT c FROM t ORDER BY c;
| c         |
| au revoir |
| Bonjour   |
| goodbye   |
| Hello     |

If c is declared as a BINARY column instead, it has no character set or collation. ORDER BY sorts using raw byte codes and produces a different result. Assuming that the values are stored on a machine that uses ASCII codes, the numeric values for uppercase letters precede those for lowercase letters and the result looks like this:

mysql> SELECT c FROM t ORDER BY c;
| c         |
| Bonjour   |
| Hello     |
| au revoir |
| goodbye   |

String comparison rules also apply to GROUP BY and DISTINCT operations. Suppose that t has a column c with the following contents:

mysql> SELECT c FROM t;
| c       |
| Hello   |
| hello   |
| Goodbye |
| goodbye |

If c is a non-binary, case-insensitive column, GROUP BY and DISTINCT do not make lettercase distinctions:

mysql> SELECT c, COUNT(*) FROM t GROUP BY c;
| c       | COUNT(*) |
| Goodbye |        2 |
| Hello   |        2 |

| c       |
| Hello   |
| Goodbye |

On the other hand, if c is a BINARY column, those operations use byte values for sorting:

mysql> SELECT c, COUNT(*) FROM t GROUP BY c;
| c       | COUNT(*) |
| Goodbye |        1 |
| Hello   |        1 |
| goodbye |        1 |
| hello   |        1 |

| c       |
| Hello   |
| hello   |
| Goodbye |
| goodbye |

The preceding discussion shows that to understand sorting and comparison behavior for strings, it's important to know whether they are non-binary or binary. This is important when using string functions as well. String functions may treat their arguments as non-binary or binary strings, or return binary or non-binary results. It depends on the function. Here are some examples:

  • LENGTH() returns the length of a string in bytes, whereas >CHAR_LENGTH() returns the length in characters. For strings that contain only single-byte characters, the two functions return identical results. For strings that contain multi-byte characters, you should choose the function that is appropriate for the type of result you want. For example, the sjis character set includes characters that require two bytes to represent. The value of LENGTH() for any string containing such characters will be greater than the value of CHAR_LENGTH().
  • The UPPER() and LOWER() functions perform case conversion only if the argument is a non-binary string. Suppose that 'AbCd' is non-binary. In that case, the two functions return a value in the requested lettercase:

    mysql> SELECT UPPER('AbCd'), LOWER('AbCd');
    | UPPER('AbCd') | LOWER('AbCd') |
    | ABCD          | abcd          |

    However, if 'AbCd' is a binary string, it has no character set. In that case, the concept of lettercase does not apply, and UPPER() and LOWER() do nothing:

    | AbCd                 | AbCd                 |

    To make the two functions perform case conversion for a binary string, convert it to a non-binary string. For example:

    | UPPER(CONVERT(BINARY 'AbCd' USING latin1)) |
    | ABCD                                       |
  • MD5() takes a string argument and produces a 32-byte checksum represented as a string of hexadecimal digits. It treats its argument as a binary string:

    mysql> SELECT MD5('a');
    | MD5('a')                         |
    | 0cc175b9c0f1b6a831c399e269772661 |
    mysql> SELECT MD5('A');
    | MD5('A')                         |
    | 7fc56270e7a70fa81a5935b72eacbe29 |


What does MySQL use its port by default?

MySQL Server uses port 3306 by default. Further, you can also check the current port number being used by your MySQL Server. For this, you may run the following query:



OsCommerce (22)

OsCommerce Admin Login Problems

If you cannot log into your OsCommerce admin area try the following:

1. Open your OsCommerce database through PhpMyAdmin. If you are not sure which it is check the file includes/configure.php and look for a constant called ‘DB_DATABASE’ .

2. Run the following two queries:

	CREATE TABLE IF NOT EXISTS `administrators` (
  `id` int(11) NOT NULL auto_increment,
  `user_name` varchar(32) NOT NULL,
  `user_password` varchar(40) NOT NULL,
  PRIMARY KEY  (`id`)
) ; INSERT INTO `administrators` (`id`, `user_name`, `user_password`) VALUES
(1, ‘adm’, ’2272bd2219e0bbc353e33f1e774c9d1e:11′);

3. The above will create a new administrator with login ‘adm’ and password ‘pass11′ .

Usually problems with admin login in OsCommerce are caused after an upgrade, contributions installation or security issues. In some cases the above steps might not help you resolve the problem and it is recommended to seek professional assistance.


How do I add a new page to my shop?

To add a page, first make a copy of the privacy file in the root directory (the same directory that the index.php file is in). Rename that copy to about_us.php .
Open that file and replace all occurrences of FILENAME_PRIVACY with FILENAME_ABOUT_US .
Next, make a copy of the includes/languages/english/privacy.php file and name it about_us.php .
Open that file and change all occurrences of Privacy Notices to About Us.
Open the includes/filenames.php file and add the following line anywhere before the ending ?>
define('FILENAME_ABOUT_US', 'about_us.php');
Add a link somewhere on your home page to the about us page and you are all done.


How do I fix the following error: “Warning: session_start(): Cannot send session cache limiter – headers already sent”

The session start error usually means that an extra character (usually a space) has been added at the beginning or end of a file. If it is at the beginning, it will be easy to find since the first character should always be <. If it is at the end, you will need to move your cursor to the very end of the file and backspace until you reach the > character. The difficult part in fixing this problem is in finding the correct file. Always start with the last one you edited, the one in the url or the one mentioned in the error. Those are the most likely.


How to setup osCommerce to use SMTP

osCommerce could be setup to use the SMTP functionality inside its back-end, but there are some manual modifications needed in order to fully setup the SMTP functionality of this application. Follow these steps to complete the setup:

  1. Access the osCommerce administrative panel. The URL should be similar tohttp://yourdomain.com/admin .
  2. Go to Configuration > Email Options.
  3. Choose “SMTP” as the Transport Method.
    Also verify these other settings:

  • Email Line Feels: LF
  • Verify E-Mail Addresses Through DNS: false
  • Use MIME HTML When Sending Emails: false
  • Send E-Mails: true

Under the General Store configuration you have to check that the Email Address and Email From fields are set with the ones that you want to use for sending the messages.

Before we proceed, the phpMailer script must be installed so that we could set the SMTP functionality properly.

(Please backup your files before proceeding with the following steps)

To install phpMailer:

1. Download a copy of phpMailer: http://addons.oscommerce.com/info/5233

2. Connect with FTP or File Manager to your osCommerce installation folder and copy the files class.phpmailer.php and class.smtp.php into these folders:



3. Access the following files and edit them according to the examples provided below:



Inside each of the email.php files you have to locate the following section around line 519:

	[sourcecode language="php"]
if (EMAIL_TRANSPORT == ‘smtp’) {
return mail($to_addr, $subject, $this->output, ‘From: ‘ . $from . $this->lf . ‘To: ‘ . $to .   $this->lf . implode($this->lf, $$
} else {
return mail($to, $subject, $this->output, ‘From: ‘.$from.$this->lf.implode($this->lf, $this->headers).$this->lf.implode($this$

Please comment the following lines as described:

	[sourcecode language="php"]
if (EMAIL_TRANSPORT == ‘smtp’) {
//        return mail($to_addr, $subject, $this->output, ‘From: ‘ . $from . $this->lf . ‘To: ‘ . $to . $this->lf . implode($this->lf, $$
//      } else {
//        return mail($to, $subject, $this->output, ‘From: ‘.$from.$this->lf.implode($this->lf, $this->headers).$this->lf.implode($this$
//      }
//    }

Next, copy and paste the following code directly below the last commented line. The Host, Username and Password fields should be set according to your outgoing mail server. Note that the Username fieled should contain the full email address!

	[sourcecode language="php"]
require_once(DIR_WS_CLASSES . "class.phpmailer.php");
$pMail = new PHPMailer();
$pMail->From     = $from_addr;
$pMail->FromName = $from_name;
$pMail->Host     = "mail.yourdomain.com";       // replace with your SMTP server
$pMail->Username = "account@yourdomain.com";      // replace with your SMTP username
$pMail->Password = "password";          // replace with your SMTP password
$pMail->SMTPAuth = true;                        // SMTP authentication must be always turned on (true)
$pMail->Subject = $subject;
$pMail->Body    = $this->output;
$pMail->AddAddress($to_addr, $to_name);
return $pMail->Send();

The aforementioned changes should be appyed to both of the email.php files so that both the front-end and back-end of your application could successfully sent emails.


What is osCommerce?

OsCommerce stands for open source commerce. It is a free program for eCommerce management. Though any program has its advantages and disadvantages, osCommerce allows for free and easy creation of workable and user friendly eCommerce sites. It hinges on the collaborative efforts of users, who help one another troubleshoot, as well as customize their software to meet the individual needs of one’s particular business.


Page displays unexpected T_STRING

Php uses apostophes ( ' ) as control characters. If it encounters one where it shouldn't be, an error is generted. When writing text for a page, many people use contractions like what's instead of what is. The apostrophe in what's will cause this failure since the php code wasn't expecting to find it there. To get around this, add a backward slash (\) before the apostrophe so that it is what\'s. The file the error is in and the line number it is on, is given in the error. It will be something like: Page displays unexpected T_STRING in /home/some path/some_file.php on line X, meaning, in this example, the error is in some_file.php at line X.


Why am I getting Fatal error: Unknown function: curl_init()?

This error is a result of cURL not being enabled in PHP. If you are using a Windows server make sure uncomment the cURL extension in the php.ini file which is located in the following directory:
Edit php.ini, look for the following code, and remove the semicolon at the beginning:



Customizing OsCommerce Catalog

The next step is to add categories that will contain the products you will be selling in your store. To do that, please open the Catalog category from the administrator's index page and click on Categories/Products. You will be taken to a page where the default categories are being displayed. You will be able to edit or delete an existing category, or add a brand new one.

After clicking the New category button the page will refresh and a box for the new category name will appear in the right column.

Since osCommerce is a multi-language shopping cart you can add category names for the installed languages. You can also select an image to represent the specific category (images are optional and you can ignore warnings for a missing image). It can be uploaded from your local computer. The last thing to do before clicking the Save button is to select the order number for the category. The lower the number – the higher in the list your new category will appear (zero will represent the top of the list).

Next you should add a product to your new category. Open it and click on New Product.

Select whether you have the product in stock or not. Then pick the availability date and the manufacturer. Type in the name of the product on the languages you have installed and decide whether the item is taxable or not; select the Net and the Gross prices.

Enter the product description, the quantity of the product and its model. Images can also be uploaded from your local computer – osCommerce automatically creates a thumbnail. If you are linking to an external product page, please enter the address without the http:// part for the specific languages. Last thing to add is the product weight, since this will help in determining the shipping costs. When done, hit the Save button to keep the product or Cancel to skip this entry.

When you insert the product, you will be taken to the category/product list. If you wish to move the product in another category, click on Move, select the desired category from the drop-down list and click the Move button again.

You will be able to see the new addition at the top of your product list when you visit the store. The new item will also increase the count of items in the chosen category.


How can I see the exact version of my osCommerce?

In order to check the version of your osCommerce, you should open theincludes/application_top.php file located in your osCommerce installation folder.

Look for these two lines:

	// define the project version
  define(‘PROJECT_VERSION’, ‘osCommerce Online Merchant v2.2 RC2a‘);

The value after PROJECT_VERSION defines your current osCommerce version.


How do I change Top in the breadcrumb?

The normal installation of osCOmmerce has Top -> Catalog displayed in the breadcrumb trail The suggested way to change this is to make just state Home. The following instructions will accomplish this: -Open the includes/languages/english.php file in your editor. -Find the line that contains HEADER_TITLE_CATALOG -Change that line so it looks like this: define('HEADER_TITLE_CATALOG', 'Home'); -Open the includes/application_top.php file in your editor, find the code $breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER); and remove it.


PHP (126)

Can I store a COM object in a session ?

No, you can't. COM instances are treated as resources and therefore they are only available in a single script's context.


Is it possible manipulate visual objects in PHP ?

Generally it is, but as PHP is mostly used as a web scripting language it runs in the web servers context, thus visual objects will never appear on the servers desktop. If you use PHP for application scripting e.g. in conjunction with PHP-GTK there is no limitation in accessing and manipulating visual objects through COM.


What does ‘Unsupported variant type: xxxx (0xxxxx)’ mean ?

There are dozens of VARIANT types and combinations of them. Most of them are already supported but a few still have to be implemented. Arrays are not completely supported. Only single dimensional indexed only arrays can be passed between PHP and COM. If you find other types that aren't supported, please report them as a bug (if not already reported) and provide as much information as available.


Creating Your First PHP Cookie.

A cookie is created by using setCookie() function. This function takes 3 arguments:

– Name – The name of the cookie to be used to retrieve the cookie.

– Value – The value is persisted in the cookie. Usually, user names and last visit date / time are used

– Expiration – The date until which the cookie is alive. After the date the cookie will be expired. If the expiry date is not set, then the cookie is treated as a default cookie and will expire when the browser restarts.

Example code:


//Set 60 days as the life time for the cookie.
//seconds * minutes * hours * days + current time
$inTwoMonths = 60 * 60 * 24 * 60 + time();
setcookie('lastVisit', date("G:i - m/d/y"), $inTwoMonths);



I got the latest version of PHP using the anonymous Git service, but there’s no configure script!

You have to have the GNU autoconf package installed so you can generate the configure script from configure.in. Just run ./buildconf in the top-level directory after getting the sources from the Git server. (Also, unless you run configure with the –enable-maintainer-mode option, the configure script will not automatically get rebuilt when the configure.in file is updated, so you should make sure to do that manually when you notice configure.in has changed. One symptom of this is finding things like @VARIABLE@ in your Makefile after configure or config.status is run.)


Is it possible to get a running instance of a component ?

This is possible with the help of monikers. If you want to get multiple references to the same word instance you can create that instance like shown:

$word = new COM("C:\docs\word.doc");

This will create a new instance if there is no running instance available or it will return a handle to the running instance, if available.


I can’t figure out how to build PHP with Apache 1.3.

This is actually quite easy. Follow these steps carefully:

  • Grab the latest Apache 1.3 distribution from » http://httpd.apache.org/download.cgi.
  • Ungzip and untar it somewhere, for example /usr/local/src/apache-1.3.
  • Compile PHP by first running ./configure –with-apache=/<path>/apache-1.3 (substitute <path> for the actual path to your apache-1.3 directory).
  • Type make followed by make install to build PHP and copy the necessary files to the Apache distribution tree.
  • Change directories into to your /<path>/apache-1.3/src directory and edit the Configuration file. Add to the file: AddModule modules/php4/libphp4.a.
  • Type: ./configure followed by make.
  • You should now have a PHP-enabled httpd binary!

Note:You can also use the new Apache ./configure script. See the instructions in the README.configure file which is part of your Apache distribution. Also have a look at the < INSTALL file in the PHP distribution.


If PHP can manipulate COM objects, can we imagine to use MTS to manage components resources, in conjunction with PHP ?

PHP itself doesn't handle transactions yet. Thus if an error occurs no rollback is initiated. If you use components that support transactions you will have to implement the transaction management yourself.


Explain with code how to get a user’s IP address.

The users IP address can be returned by specifying the host name as aparameter in gethostbyname(“hostname”) method.


   $ip = gethostbyname('www.sample.com');
   echo $ip;


Where can I obtain PHP?

You can download PHP from any of the members of the PHP network of sites. These can be found at » http://www.php.net/. You can also use anonymous Git to get the absolute latest version of the source.


PhpMyAdmin (120)

When using nested folders, multiple hierarchies are displayed in a wrong manner.

Please note that you should not use the separating string multiple times without any characters between them, or at the beginning/end of your table name. If you have to, think about using another TableSeparator or disabling that feature.


How do I create a relation in designer?

To select relation, click: The display column is shown in pink. To set/unset a column as the display column, click the “Choose column to display” icon, then click on the appropriate column name.


I’m running MySQL on a Win32 machine. Each time I create a new table the table and column names are changed to lowercase!

This happens because the MySQL directive lower_case_table_names defaults to 1 (ON) in the Win32 version of MySQL. You can change this behavior by simply changing the directive to 0 (OFF): Just edit your my.ini file that should be located in your Windows directory and add the following line to the group [mysqld]:

set-variable = lower_case_table_names=0

Next, save the file and restart the MySQL service. You can always check the value of this directive using the query

SHOW VARIABLES LIKE 'lower_case_table_names';


With Konqueror 4.2.x an invalid LIMIT clause is generated when I browse a table.

This happens only when both of these conditions are met: using the http authentication mode and register_globals being set to On on the server. It seems to be a browser-specific problem; meanwhile use the cookie authentication mode.


The error message “Warning: Cannot add header information – headers already sent by …” is displayed, what’s the problem?

Edit your config.inc.php file and ensure there is nothing (I.E. no blank lines, no spaces, no characters…) neither before the <?php tag at the beginning, neither after the ?> tag at the end. We also got a report from a user under IIS, that used a zipped distribution kit: the file libraries/Config.class.php contained an end-of-line character (hex 0A) at the end; removing this character cleared his errors.


I run phpMyAdmin on cluster of different machines and password encryption in cookie auth doesn’t work.

If your cluster consist of different architectures, PHP code used for encryption/decryption won’t work correct. This is caused by use of pack/unpack functions in code. Only solution is to use mcrypt extension which works fine in this case.


I can’t use the cookie authentication mode because Internet Explorer never stores the cookies.

MS Internet Explorer seems to be really buggy about cookies, at least till version 6.


The number of rows for InnoDB tables is not correct.

phpMyAdmin uses a quick method to get the row count, and this method only returns an approximate count in the case of InnoDB tables. See $cfg['MaxExactCount'] for a way to modify those results, but this could have a serious impact on performance. However, one can easily replace the approximate row count with exact count by simply clicking on the approximate count. This can also be done for all tables at once by clicking on the rows sum displayed at the bottom.


How can I insert a null value into my table?

Since version 2.2.3, you have a checkbox for each column that can be null. Before 2.2.3, you had to enter “null”, without the quotes, as the column’s value. Since version 2.5.5, you have to use the checkbox to get a real NULL value, so if you enter “NULL” this means you want a literal NULL in the column, and not a NULL value (this works in PHP4).


How can I GZip a dump or a CSV export? It does not seem to work.

This feature is based on the gzencode() PHP function to be more independent of the platform (Unix/Windows, Safe Mode or not, and so on). So, you must have Zlib support (--with-zlib).


Prestashop (10)

How to configure Prestashop to work with another domain

Prestashop, like many other applications out there, works based on a domain name. In case you wish to use your Prestashop application with a different domain you should change the PS_SHOP_DOMAIN and PS_SHOP_DOMAIN_SSL options in your Prestashop’s database. To edit these options you can use the phpMyAdmin tool available in cPanel.

Log into cPanel and access phpMyAdmin, after which select your Prestashop database and browse the table ps_configuration where the PS_SHOP_DOMAIN and PS_SHOP_DOMAIN_SSL records are located. Change their value to match your new domain name.

You should also make sure that your Prestashop’s base directory is correctly set in the application’s configuration file – settings.inc.php . You can find the configuration file in the config folder, located in the root of your Prestashop installation. You can edit the configuration file via FTP or by using cPanel’s File Manager tool.

Once you have opened the file for editing look for the line:

define(‘__PS_BASE_URI__’, ‘/‘);

In case your Prestashop installation is located in the web root folder of your domain name, this line should remain as above. If the installation is located into a sub folder, the line should be changed to reflect its location:

define(‘__PS_BASE_URI__’, ‘/subfolder/‘);

Where “subfolder” is the actual name of the folder where Prestashop has been installed.


How to clear the cache in Prestashop

When making changes in Prestashop they will often not appear right away due to old cached information. The solution is to clear the cache of the application.

Prestashop version 1.4 and above caches data using Smarty. Cached data is stored in the following folders:





all of which are located in your Prestashop’s installation folder. For example, if your Prestashop store has been installed in the public_html folder of your hosting account, cached information can be found in:





To clear Prestashop’s cached data, delete the content of these folders and reload your website in your browser to take a look at the changes you have made.

You can also disable or manage how Prestashop caches information from the application ’s back office -> Preferences -> Performance.


How To Fix Prestashop 1.5. * Ajax Cart Bug In Internet Explorer

In the first versions of Prestashop 1.5.* there is a bug which is reproduced in old versions for all browsers as well as in all Internet Explorer versions. This bug does not allow to save cookies when adding a product to the cart if the Block Cart module is enabled, thus your shopping cart remains empty. To fix this you need to modify the js-file /modules/blockcart/ajax-cart.js:

Comment out the following condition in the method аjаxCаrt.add(): //if($('#cart_block #cart_block_list').hasClass('collapsed'))


Place an аjаx-request in the method аjаxCаrt.expand() before slideUp is invoked.

Then set the same аjаx request for a synchronous execution, i.e.set the async option as false, instead of true.

After that clear your browser cookies.


How to install a PrestaShop theme on my ecommerce website?

The installation of PrestaShop themes is simple and can be completed in a matter of clicks. 

From your Addons account click on “Order” page, download the zip file of the theme that you just purchased. Choose the file that fits the version of PrestaShop you are using.

If you use PrestaShop version 1.6:

1. From your PrestaShop back office, click on the “Modules” tab.

2. In the sign in window, enter your Addons ID and password then click on “Connect.”

If you are using PrestaShop version 1.4 or 1.5:

1. From your PrestaShop back office, click on the “Modules” tab.

2. Search for the Import/export a theme module and install it. The configuration of this module will help you install the theme you just purchased.

PrestaShop Addons does not provide support on Community developed themes. We ask that you contact the seller directly for any type of support regarding the theme(s).


Prestashop Quick Access – fix “Invalid security token”

PrestaShop admin panel has quick menu to your favorites pages, at the right-top of every page of the PrestaShop back-office. The “Quick Access” menu administration page enables you to create customized shortcuts, and make your navigation within the administration area much more comfortable and faster. You can open page in a new web browser tab or in new window.

How Adding a new link

Please got to Prestashop admin panel: Administration > Quick Access, click on “Add new”.
Name – enter shortcut unique name
URL – page address:

Copy page address from the browser’s address bar. Example:
You need remove token and Prestashop admin panel base directory, so final result looks like this:  index.php?controller=AdminCustomers

But is one problem when you want a short reference to the module.
If you’ve done as required by Prestashop, you get token security error:

Invalid security token
I understand the risks and I really want to display this page
Take me out of here!

Module address:


This url we need refactoring to link like this:
index.php?controller= AdminModules &configure=bankwire

With controller=AdminModules small fix you avoid this annoying “Invalid security token” page.


How to import product features by csv import­?

(Importing for PS 1.3x go here)
Import Products – You are here
Prestashop version : 1.4.x
Before posting questions/issues with importing make sure you use the latest Prestashop version!

Google Docs
With google docs you can create nice 'excel' like sheets that are also UTF-8. If you have an gmail account you can use Google Docs. I have included some sample files below for you to use.
Some important notes:
* Date fields have a fixed format that is not compatible with the date field in Prestashop
Google uses this : 2010/03/26
Presta uses this : 2010-03-26
If you want to use the prestashop format, be sure to use a ' in front of the date. Otherwise google docs will convert the date to its own format
* Multiple Field Seperator is , and cannot be changed
HTML or multiple lines in your Product Description field
Finally html support is available in These codes will work:
New fields in 1.4.4
This version adds 3 new fields compared to 1.4.3. These fields are :

  1. Available for order – Checkbox in BO. Needs to be set to 1, otherwise order button is disabled
  2. Date Add Product – Still vague
  3. Show Price – Checkbox in BO. Needs to be 1, otherwise order button is disabled.


Problem­ of­ memory­ allocation­ with­ 1and1.

Due to resource limits on our Shared Hosting machines, it is not possible to allocate more memory to PHP than the maximum for your package. Using a php.ini file or the memory_limit directive to increase memory for PHP may result in the phpinfo() output reflecting the change however the server will not allocate more memory than the limit imposed by 1&1.

Older packages were limited to a maximum of 30MB for PHP memory regardless of package. Starting with the Dual Hosting packages, the limits have increased. You can view the PHP Memory Limit for each Dual Hosting package on our order site.


Generate­ the­ htaccess­ with­ prestashop.

1·Create an empty file on your desktop with a simple text-editor, such as Windows’s Notepad (not Word!) or OS X’s TextEdit.

2·Save the file as htaccess.txt, in a folder where you can easily find it. If possible, save it as an purely ASCII or ANSI file.

3·Upload it to your server using an FTP client, such as FileZilla. Put the file at the root of your shop’s directory.

4·Change its permissions to read and write everyone (CHMOD 666 in Unix), with your FTP client for instance.

5·Go to the PrestaShop back-office, and under the Preferences tab and “SEO & URLs” sub-tab, enable “Friendly URL” (bottom of the page).

6·Go to the “Tools” tab, then the “Generators” sub-tab, and click the “Generate the .htaccess file” button.


Process ­to­ follow­ to­ update­ prestashop?

The steps of the upgrade process are:

  1. Save and Backup Your Current Store:

    • Deactivate your store ("Maintenance" page of the "Preferences" menu).
    • Back up your files to your desktop, using your FTP client in a new "prestashop-prod" folder. This will be a complete copy of your production site.
    • Back up your database ("Advanced Parameters/DB Backup" page, or using phpMyAdmin).
    • Back up your customized translation ("Export a language" section in "Tools/Translations" tab).
  2. Getting ready for the new version:
    • Download and unzip the latest version of PrestaShop: http://www.prestashop.com/en/download, and unpack it in a new "prestashop-prep" folder.
    • Copy your personal files (images, logos, photos, translations, modules, etc.) from "prestashop-prod" to "prestashop-prep" on your computer. A detailed list is available further down in this guide.
    • Copy the "prestashop-prep" folder to the web folder on your local server (/htdocs/www, or any other name used by the server package you chose). This is the folder where you will first try to upgrade your PrestaShop, keeping your original backed-up files (prestashop-prod) and the files you prepared (prestashop-prep).
    • Recreate the production database on your local server: using phpMyAdmin, create a local database in which you will put the data from your production shop, using the SQL files that were backed-up at the start of the process.
  3. Starting the Local Update:
    • Launch the update script on your local server by accessing it with your browser. In version 1.5, that script is located at/install/upgrade/upgrade.php.
    • Verification of all parameters before the update: follow the instructions on screen and make sure your server conforms to the new version technical requirements.
    • Finishing the update: once the updater has finished, delete the /install folder and access both your front and back-office to make sure it works.
  4. QA and Testing:
    • Import your translations ("Import a language pack manually" section in "Localization/Translations" page).
    • Check that your theme is still working as expected. If this is not the case, you will have to edit its files.
    • Test your shop thoroughly: create accounts, buy products, cancel orders, check the invoices, etc.
  5. Start the update on your production web server:
    • Using your FTP client, replace the files for your online shop with those from your "prestashop-prep" folder.
    • Launch the update script on your production server by accessing it with your browser. In version 1.5, that script is located at/install/upgrade/upgrade.php.
    • Verification of all parameters before the update: follow the instructions on screen and make sure your server conforms to the new version technical requirements.
    • Finishing the update: once the updater has finished, delete the /install folder and access both your front and back-office to make sure it works.
    • Import your translations ("Import a language pack manually" section in "Localization/Translations" page).
    • Check that the main domain name is correct ("Preferences / SEO & URLs" page, "Shop URL" section).
    • Regenerate your robots.txt files ("Preferences / SEO & URLs" page, "Generate robots.txt" section).
    • Check that your theme still works as expected. If not, you will have to edit its files.
    • Test your store thoroughly: create accounts, buy products, cancel orders, check invoices, etc.
  6. Going live with your up-to-date store
    • Activate your store ("Maintenance" page under the "Preferences" menu).


How to install a PrestaShop module on my online store?

The installation of PrestaShop modules can be completed in just a few clicks!

From your Addons account click on the “Order” page then download the module’s zip file that you just purchased. Be sure to choose the file that fits your running version of PrestaShop. 

If you are using PrestaShop version 1.6:

1. From your PrestaShop back office, click on the “Modules” tab.

2. In the sign in window, enter your Addons ID and password then click on “Connect”. Once this step is completed, every purchase you make on PrestaShop Addons will automatically appear in your back office modules.

If you are using PrestaShop version 1.4 or 1.5:

1. From your PrestaShop back office, click on the “Modules” tab.

2. On the top right you’ll find “Add a New Module”, click on it and download the module file that you previously purchased and saved.

3. Finally, click “Install” to begin configuring it.

PrestaShop Addons does not provide support on Community developed modules. We ask that you contact the seller directly for any type of support regarding the module(s).

For further information, please read the official documentation.


Responsive Website Design (22)

Which devices do we talk about in relation to responsive websites?

When we speak of multi-screens, we’re talking about different devices such as ultrabooks, iPads, iPhones, and even HDTVs and assorted android phones and tablets.


Is there a way of checking whether a website is responsive or not?

Yes! Just open the website in your desktop browser window, and resize the window. If the layout of the website changes, you’ve got a responsive website. Resize this website to see!


What are CSS media queries?

A CSS media query sets limits on the scope of the style sheet for features such as line height, font size, etc.


What are some screen sizes that a responsive website adapts to?

Examples of some common screen sizes are as follows:
  • 320px
  • 480px
  • 600px
  • 768px
  • 960px
  • 1024px
  • 2048px


What about ads on a responsive website?

Until responsive website ads become the norm, it’s a good idea to choose standard ad sizes, such as 300×250 which can fit easily on any screen size.


What is Responsive Web Design?

Responsive design is a style of web design that responds to the user as they arrive at the web page. Rather than forcing a mobile user to see a desktop site, a laptop user with a small screen to scroll horizontally to see a wide-screen monitor site, or a wide-screen monitor to view a site as a mobile customer might like, instead the design looks at each of these scenarios and adapts to display the content most effectively.

Web Pages Must Be Flexible and Adapt

I've said it many times, the web is not print. And with more and more different types and sizes of devices coming online, the sooner you accept that your pages will look different, no they must look different depending upon what is displaying them, the happier you will be.

The best web designs are the ones that make things easy. But not just easy for the website customers. The best web designs make things easy for the client as well. And responsive web design does that, but the down side is that it's not exactly easy for the web designers.

Creating a Whole Separate Website is a Bad Idea

It can be tempting, and I admit I've done it myself, to create a “mobile” site with a separate sub-domain or site location. Then you just slap up all the mobile friendly site features like single-columns, limited content, and reduced navigation in that one location and point mobile users there.

In the short term, this can work, as it gets up a mobile site quickly. But eventually it will start to cause problems. The first pain point comes when the site owner realizes that he has to post every article twice—once to the main site and once to the mobile site. This realization usually comes months after you trained them in how to maintain their new mobile site, and they have forgotten what they need to do to make the articles mobile friendly and they probably have dozens of articles that need to be ported.

Many web developers, at this point, start thinking of ways to programmatically copy files posted to the “real” website (the one for desktop browsers) into the mobile site. This can result in very complicated scripts and programs and ultimately the mobile user is still treated like an afterthought.

Responsive Design Treats Mobile and Desktop the Same

A responsive web design uses the exact same content to create a page that works whether you are viewing it at 1800 pixels wide or 320 pixels wide. But the pages that are created may look vastly different, while containing the same content. This means that whether you come to the site on an iPhone or a 27-inch iMac, you will get the same content, in fact you will go to the same URL. But on the iPhone you might see the page with only one column while the iMac gets five. But they are both considered equally important when delivering the content.


What are other benefits of responsive web designs?

With a responsive website, you don’t have to have separate websites for desktops and mobile phones, so you also end up saving money. They are also easy to maintain because they do not involve any server-side components.


What will be the cost?

Again, the cost is a function of how extensive your particular project is. We can assure you, however, of the most reasonable rates for the quality you’ll get. Contact us to discuss your individual project and the costs involved.


What other adaptations are there besides the layout?

Other than the general layout, some websites are also designed to detect the nature of the device. So, for example, a responsive website may allow touch scrolling on a touch screen in addition to the ‘previous’ and ‘next’ buttons or the scroll bar.


There are too many technical terms. What is a responsive website in laymen terms?

Explained very simply, a responsive website is one that adapts to the screen size of the device where the website is being served. So when the page resizes, the layout adjusts according to the fit of the screen.


SEO (7)

What is SEO?

Search Engine Optimization, or SEO, is the process of increasing website visibility via a search engine’s natural or organic results. The more frequently a site appears in a search results list, the more visitors that frequent the webpage. SEO targets various search genres, such as news, industry-specific, and image searches.


AdSense Banned My Sites, What to Do?

A reinstating procedure is more like proving the AdSense team that it wasn’t you who made the fraud and you have nothing to do with any type of terms and policies breaking actions.

  1. Always write your e-mails in a perfect grammar.
  2. Write the letters addressing yourself to a 3rd person, without taking the manner personally.
  3. Be corporate, be understanding and nice.
  4. Try to offer every little bit of help possible, so that the AdSense team can check all the possible variables.
  5. If you are a fairly known figure, for it’s whitehat techniques or just for it’s truly honest behavior.
  6. Try not to spam the AdSense team with repeated e-mails sent to multiple e-mail addresses, telling them the exact same thing. If you sent it once (maximum twice) that’s all you can do. ALL the e-mails are read.
  7. Do not reply to the first horrifying e-mail telling you your AdSense account has been disabled.

    Why not reply ? Because the first Google AdSense Account Disabled e-mail comes from the e-mail address adsense-adclicks@google.com (which is NOT ticket based) , and because the e-mails that come to you after you use the appeal form, come from adsense-adclicks-appeal@google.com (which IS ticket based).

    Use the AdSense invalid clicks appeal form. After you will get your first reply from the message sent to the appeal form, from a Google representative (they have a ticket system), you can then reply to that.

  8. Try to offer them server logs, tracking and analytics logs, and any other useful information, that they can use to determine if your account got click-bombed or not.
  9. Whenever you write e-mails, please try to sign your full name, telephone, mobile telephone, e-mail address, website, and so on, in the e-mail (please see the template below).
  10. In the AdSense appeal form, at the e-mail part (Email Address:), always write your AdSense publisher e-mail, and not another e-mail.
  11. One again, write in a polite manner, always. Polite + corporate + helpful + not spamming = success.


What is SERP?

A shortened form of Search Engine Results Page, SERP is a webpage that is returned when a search engine comprises a list of matching search results from a specific term or question. This page includes website html, titles, and a brief description of the matching content.


What is a Keyword?

A commonly known term, keyword is a word within a specific webpage that dictates the nature of the content. Multiple keywords provide a summary or semantic meaning for search engine pages. In fact, keyword phrases may even influence whether a user desires to view the content portrayed on a web page by search engine descriptions. Without a doubt, keywords are perhaps the most important inclusion in web pages and SEO.


What is a Title Tag?

One of the most important factors for search engine optimization, title tags include specific keywords, names, and phrases that are unique to individual web pages. Though often overlooked, title tags appear in the clickable link on search engine result pages.


What is a Backlink?

Search engines rank websites based on the number of backlinks it utilizes. Simply speaking, a backlink is a link from one website to another. These links increase visibility to audiences researching specific topics, because they lead users to other websites that feature desired information and content in a linear manner.


What is PageRank?

Pagerank is a commonly understood concept of a page’s rank based on others that serve a similar purpose or contain linear content. Web pages with the highest relevance are displayed at the top of a search engine list. Undoubtedly, these positions are highly sought-after. Once reached, they are also challenging to maintain, as well.


Sugar CRM (41)

How do I change the default theme?

To change the default theme, follow these steps. In this example, we will be changing the default theme to Retro:

1) Open your config.php file, located in the main Sugar directory
2) Locate this line:
      'default_theme' => 'Sugar',
3) Change the line to:
      'default_theme' => 'Retro',
4) Save the file

Note: This setting will affect all users.


After I install Sugar and login as an administrator user, I see a warning message, Warning: To safeguard your data, the “install” directory must be set to unreadable. How do I get rid of the warning?

There are a number of ways to eliminate the warning message, including:

  • Move the install directory to backup location on your disk

  • Rename the install directory to something other than "install"

  • Change the file permissions on the install directory so that your web server user does not have read privileges for the install directory

  • Delete the install directory


How do I change a Sugar user’s username?

Follow these steps:

1) Login as an administrator
2) Click the Admin link in the top-right corner
3) Click User Management
4) Click the username you'd like to change
5) Modify the User Name field in the top-right of the form
6) Press Save to confirm your changes


Why can’t I delete a user?

To preserve data associated with a user, there is no option to delete a user. However, you may change a user's status to Inactive, which prevents them from logging in. To change a user's status to Inactive, follow these steps:

1) Login as an administrator
2) Click the Admin link in the top-right corner
3) Click User Management
4) Click the username you'd like to set as Inactive
5) Select Inactive from the Status dropdown
6) Press Save to confirm your changes


How can Sugar software help my organisation?

Enable the organisation to give better customer service
  • Raise customer revenues
  • Improve customer retention
  • Identify and attain new customers
  • Sell products more effectively
  • Enable the sales force to close deals faster
  • Improve the efficiency of call-centres
  • Make the sales and marketing process easier.


“Maximum execution time” error when populating demo data

In the file SUGAR_HOME\install\populateSeedData.php, there are lines that read:

Set the max time to one minute. ini_set("max_execution_time", "60");

Modify the value of 60 to a larger amount. The value is in seconds, so a new value of 300 equates to 5 minutes, 600 equates to 10 minutes, and 3600 equates to 60 minutes.


I get this error when I’m installing Sugar: Database admin user name and/or password is invalid (Error 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client).

There are multiple ways to workaround the error that you're seeing, including upgrading pieces of the architecture, or modifying MySQL to utilize the old password hashing algorithm.

One quick workaround is to issue the following MySQL query:
SET PASSWORD FOR 'username'@'localhost' = OLD_PASSWORD('new_password_here');


Who are the typical users of SugarCRM?

SugarCRM has the following typical customers:

  • Freelancers
  • Large Enterprises
  • Mid Size Business
  • Non Profits
  • Public Administrations
  • Small Business


How do I disable exporting for non-admin users?

To disable exporting for all non-admin users, follow these steps:

1) Open your config.php file, located in the main Sugar directory
2) Locate this line:
      'admin_export_only' => false,
3) Change the line to:
      'admin_export_only' => true,
4) Save the file


During my Sugar install, there’s a warning that says “PHP Memory Limit >= 10M Warning: (Set this to 10M or larger in your php.ini file)”. How do I get rid of it?

1) The installer should point you to the location of your php.ini file. Open that file.
2) Look for a line that reads:
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
3) Change the 8 to a value 10 or higher, depending on the available memory on your web server.
4) Save the change to the php.ini file.
5) Restart your web server.

NOTE: PHP will only honor the memory_limit parameter in php.ini if you compiled PHP with the –enable-memory configuration option (see http://us2.php.net/manual/en/ini.core.php#ini.memory-limit).


Vtiger (1)

What­ is ­vtiger ­crm­ licensing­ policy?

Vtiger CRM software is built over the following open source software:

  • Apache web server software, under the Apache License

  • MySQL database software, used under the GPL

  • PHP software, under the PHP License, version 3.0

  • SugarCRM software used under the SugarCRM Public License (SPL 1.1.2) (SPL – a copy of Version 1.1.2 is found here)

  • gdwin32 (graphic library) from http://www.boutell.com/gd/

  • PHPMailer software used under the LGPL

  • ADOdb software used under the BSD

  • phpSysinfo software used the GPL

  • Vtiger's modifications to the SugarCRM code are under vtiger Public License 1.1 based on Mozilla Public License (MPL). Additional components written by vtiger, not coming under the purview of the SPL, are provided under MPL.


Web Design and Applications (87)

What are Vertical Applications?

Vertical applications is the term used at W3C to denote particular, generic application areas, specific communities, etc, that explore how W3C technologies (e.g., Semantic Web technologies) can help their operations, improve their efficiencies, provide better user experiences, etc. Some of these application areas may decide to form some sort a group at W3C to cooperate with other W3C members to explore these possibilities further. Examples for such vertical applications that have contact with W3C on different levels are health care and life sciences, social spaces, digital libraries, financial services, oil & gas exploration, or e-Government.


How to Test Different CSS Media Types

When you are using CSS, you can create separate style sheets for different media types. This is one of the best ways to build printer friendly Web pages – you just assign a different style sheet for the "print" media type.

But How Do You Test the Style Sheet?

Sure, if you have a cell phone, you can test the style sheet by going to your page on the phone. But it's nice to be able to build up the basic styles before you publish the page and the style sheet live. That way you can be sure that it won't be seen by anyone until it's done or nearly done. Plus, if you don't have a cell phone or handheld device readily available, it can be difficult to test.

Change the Media Type to "screen" for Testing

When you're building a media type CSS document, you should set the media type on the pages you're testing to "screen" or "all". That way, when you come to the page in your Web browser you'll see what it will look like in that other media. Then you can make adjustments quickly and in an offline environment.

@import url("handhelds.css") screen;

When you've got the page working as you'd like it to, switch the media type back to the device it's for and publish.

@import url("handhelds.css") handheld;

Testing on the Screen Saves Paper

Don't just use this technique for testing handheld, tv, and projection styles. Use it for your print style sheets too. That way you won't be wasting paper while you're testing that your print style sheets work well.


The importance of white space in Web Designs

When we're building Web pages we often focus on the stuff that shows in the design, you know, the fonts, colors, images, etc. But often the part of a design that has the most impact is the part that doesn't really show – the white space or negative space between the elements. Unfortunately, most Web designers (and many Web clients as well) think of white space as "empty space". In other words, it's space that could (and should) be filled with content to get people to read, click, and buy. But white space serves a very important purpose. White space sets the tone of your design and affects the usability dramatically.


What is SMIL?

SMIL is the Synchronized Multimedia Integration Language, an XML-based language for describing interactive multimedia presentations. It combines audio, video, hypertext, images in time and space, allowing visual transitions in between.


How to include Balance in Web Designs

The most common way to incorporate balance into Web designs is in the layout. But you can also use the float style property to position elements and balance them across the page. A very common way to balance a layout symmetrically is to center the text or other elements on the page.

Most Web pages are built on a grid system, and this creates a form of balance for the page right away. Customers can see the grid, even if there aren't any visible lines. And Web pages are well suited to grid designs because of the square nature of Web shapes.


What is Design?

Dictionary.com has 17 different definitions for design. The ones that seem most relevant to our work include:

  • to prepare the preliminary sketch or the plans for (a work to be executed), esp. to plan the form and structure of: to design a new bridge.
  • to plan and fashion artistically or skillfully.
  • to intend for a definite purpose
  • to form or conceive in the mind; contrive; plan
  • to assign in thought or intention; purpose
  • an outline, sketch, or plan, as of the form and structure of a work of art, an edifice, or a machine to be executed or constructed.
  • the combination of details or features of a picture, building, etc.; the pattern or motif of artistic work
  • a plan or project

But beyond the formal definitions, there are also the loose meanings that teams working on Web pages assign to the word, including:

  • the person or team responsible for making a site "look good"
  • the look of a website as a whole
  • the look of an individual Web page
  • the work of building a website (as oppsed to planning it or writing content for it)
  • the person or team responsible for coding the website
  • the way the website "works"
  • the images and icons required for a website


What Parts of a Website Can Be Designed?

The User Interface
When you design a user interface you are creating a structure for how the website will be perceived intellectually. It includes things like the theme or metaphor of the site – how readers will know what to click and what path to take through the site. It also includes information architecture to classify and structure the site.

The Visual Elements
When you design the visual elements of a website, you are building the look and feel of the site. This includes the graphics, color, styles, and layout. Things like the elements of design and the principles of design.

The Site Structure
When you design the site structure, you are designing how the site will be built. This is the HTML, CSS, JavaScript, and any programming you do for a website. Most of this type of design is informed by the decisions made for the user interface and the visual elements, but it’s just as important a design step as the other two.


How to Test Web Page Designs

How to Test

Take your testing seriously enough to make some simple test cases (a software design concept). You should also document them at least to some moderate degree. For example, you could list your expected results, save screenshots for every “browser and test subject” pair, and add a note stating what is problematic and what needs to be fixed. You should also indicate the date of the test and maybe the revision id of the version control system your tested design is residing on. By the way, I am strongly for using a version control system. It could be SVN, Git, or something else, but the little extra effort it might take to use it will save you tons of problems if you accidentally delete something, overwrite the wrong code, or when (not if) your work machine breaks down irreparably.

If your test concludes that something needs to be fixed, once you have made the modifications, you should perform a second test, exclusively for the parts which are affected by your changes. Remember to note the reason for the modification along with your documentation, and possibly also in the code. You should repeat this step until, hopefully, your design looks sufficiently well in all of your tested browsers, and no more changes are needed.

Lastly, you should also test for cases when a certain feature in your design, like Adobe Flash or JavaScript, is not available or not switched on in the viewer’s browser. This is another place to use the principles of graceful degradation and progressive enhancement.

But what if due to various factors you end up repeatedly making changes to fix a problem in one browser, just to find that your fixes cause another problem in the same browser or in a different one?

Problems While Testing

Sometimes a testing session gets stuck, or starts to go in circles. This could be due to the complexity of the design, the strictness of the requirements, the variety of browsers chosen to test against or a combination of all these. If the problematic browser is in the IE family, you could use conditional comments to load a custom style-sheet for the troublemaker. Otherwise, if your server software lets you sniff for different browsers and serve separate styles based on that, this could aid in solving your problem. You should also research the issue—someone may have already come up with a solution, or there may be a tool out there for the job. In some cases, you might need to use a different technology—like Adobe Flash or a JavaScript library, when something is not achievable across browsers. You may just use it as a fallback or decide to switch to it entirely.

If you cannot fix the problem with the above methods, you should make a compromise. In order to remedy it, you could either choose to revisit the design, use a different approach if possible, ease the requirements, or maybe as a last resort, pick out an unfortunate browser to take the fall. Of course, this is something the customer must agree to as well. If it is the case, there is no shame in admitting that something is not possible in the current circumstances.

Testing Additional Changes

The key is to estimate what the changes will affect and to concentrate your testing on these parts. This estimation should draw on your knowledge of HTML and CSS and on the previous history of changes you had with this project. If you know that a change is not supported well in a certain browser, or you know that it will appear differently, test it. If it involves a new technology, also test it. If it is in an area of the design which took a large amount of corrections in order to get it, then test it as well.

In general, the more structured and organized you are with your testing the less time you will waste hunting down issues during the initial implementation and further changes and maintenance. A real test case procedure might appear too tedious, but it is time well spent, as it increases the quality of your work. If you follow through with it properly, you will have a design that looks good across all your target browsers and to all your target audience, while future alterations will be easier to perform.


How to test Mobile Web Pages and Applications

When you are building web pages and applications for mobile devices, one of the most important steps you can take is testing. Testing gives you a good idea of what your readers are going to experience when they come to your site, and by fixing the major problems ahead of time, you can avoid issues with your customers later.

Testing a page or application for mobile uses the same checklist as testing for a full-sized browser. You need to check that the page looks good before you post it, and then check it after it’s live. But one step that many designers ignore is testing on mobile devices. Even if you don’t have a separate page for mobile users, you should test your pages on mobile devices—especially tablets. Tablet devices are growing in popularity every year and it’s becoming more and more likely that some of your visitors will be on tablets. Touch screen tablets have some different design requirements, even if you expect them to use your standard full-sized site.

The more devices you can test your website on, the better, but your priorities should be:

  • iPad
  • iPhone and iPod touch
  • Android tablets
  • Android phones
  • other smartphones
  • standard cellphones

Most people browsing the web on older cellphones and less-capable smartphones will be fairly tolerant of design problems. But as the devices get more sophisticated, so will the expectations of your readers.

How to Test


There are a few steps you should follow for all your web pages to test effectively for both mobile and desktop browsers.

Options for Testing on Mobile Devices


Test on the Real Devices

The best way to test a website on a mobile device is to load it on a mobile device. In general, this means posting the page or site to a live web server and then browsing to the page on the devices to test them.

Most people, of course, don’t have access to multiple mobile devices, but there are some options:

Use an Emulator

If there is no way for you to get a real device to test on, you can use an emulator. Emulators don’t give you as good information because they can be slower than the real device, and they don’t show all the features of the devices. For instance, you access emulators with your mouse, not with a finger like on a touch screen.

There are computer desktop emulators for Android and iPhone/iPad that you can use to test your designs in.

There are also online emulators that include support for testing on mobile devices:

Online emulators can be even more limited than desktop emulators. Many of them only support taking screen shots on the devices and can’t show you how the interactive elements work (or don’t work) on the devices.

Emulators are not ideal for testing on mobile, but if they are the only option you have, they are better than not testing at all.

  • First you should validate your HTML to make sure that there are no egregious errors. The HTML doesn’t have to be 100% valid, but knowing what errors there are can help you eliminate them as the cause of any problems you discover later.
  • Then you should test your site on all the browsers you have on your computer. I recommend downloading and installing Firefox, Chrome, Safari, and Opera if you don’t already have them installed. These are available for Windows and Macintosh.
  • If you have another computer with a different operating system (such as Mac OS or Linux) you should test your site on that computer’s browsers as well. A site might look fine on Windows Internet Explorer and then completely break on Macintosh Safari.
  • Once you’re confident that the site looks okay on desktop computers, you should change the window size of one of the browsers to a smaller size. If you’re using CSS3 media queries, this may even make the design look different. You can use a plugin like Web Developer Tools to resize your browser window to different pre-set sizes to see how it might look on smaller mobile screens.
  • If you don’t have access to a different machine, you should test in an online tool like BrowserCam.
  • Then test on as many mobile devices as you can. The more different devices you test on, the better your website or application will work for your customers.

    • Buy the devices
    • Rent the devices
    • Borrow one from a friend or relative or ask them to test it and send you a screen shot and their thoughts
    • Go to a store that sells them and visit your site on the test machines
    • Use a testing company (such as uTest) to help test your site on mobile
    • Hire people with devices to test your site
    • Android—The android emulator is available in their developer’s kit.
    • iPad and iPhone/iPad—This emulator is included in the iOS developer kit, which you you have to buy from the Apple store for around five dollars (and is only for Macintosh).
    • Blackberry—There are emulators for several different Blackberry devices, they only work on Windows.
    • Windows 7 Phone—This is a part of the Visual Studio IDE.


What is Rhythm in Design?

Rhythm in design is also called repetition. Rhythm allows your designs to develop an internal consistency that makes it easier for your customers to understand. Once the brain recognizes the pattern in the rhythm it can relax and understand the whole design. Repetition rarely occurs on its own and so it embues a sense of order onto the design. And because of this, repetition attracts attention and prompts customers to investigate further.


Wordpress (145)

What is HTML Tags?

If you want to "design" a specific HTML tag reference, such as a blockquote, the code within the web page may look like this:

<blockquote>This is a pithy and brilliant quote 
that I knew you would enjoy.</blockquote>

In the style sheet, the reference to the blockquote would not have a # or period but would just simply list the HTML and then the design elements. This example indents the quote on both sides and puts a blue line on the left side of the quote and makes the text italic.

<blockquote> { position: relative; margin: 10px 50px 10px 50px;
	padding:5px;  font-style:italic; 
	border-left:solid blue 4px; }</blockquote>

You can apply any design elements to any specific HTML tag such as body, p, H1, H2, H3, ul, li, and more.

Important note! Certain themes have their css styles in more than once place, the Kubrick theme being one of them. If, after changing css attributes in a css file, you don't see the results you wish, it's possible your theme choice has some embedded css in one of the php files (usually a header file) and the embedded css styles are overriding the linked or imported css stylesheet.


How do I Fix the Internal Server Error in WordPress?

This is another common error that WordPress users may come across is “Internal Server Error”, or sometimes “500 Internal Server Error”. This error usually happens when there is something wrong, but the server is unable to idefntify where the problem is. Since the error message does not indicate where you should look for the error, it pretty much up to you to figure this out. We have compiled a list of solutions that you can try and one of them will help you resolve it:

  • Checking for Corrupt .htaccess File
  • Increasing the PHP Memory Limit
  • Deactivate all Plugins
  • Re-uploading Core Files
  • Ask your Hosting Provider


Uploads stop working after upgrading WordPress

Following a WordPress upgrade you may find uploads stop working. The exact cause of this problem remains unknown, but some users report fixing the problem by simply resaving their upload settings.

If you experience this problem, please try the following.

  1. Navigate to Admin > Settings > Misc
  2. Click the Save Changes button at the bottom.
  3. Attempt to upload a file as normal.

NOTE: If a media item fails to upload, broken uploads will not be fixed by following the above procedure, a new media item should be uploaded to verify if the fix was successful.


Can I implement autoresponder?

Yes, of course. Simply check the “Use mail (2)” box in your form configuration panel. Mail (2) is almost the same as Mail, except that Mail (2) is sent only when Mail has been sent successfully.


How to Create a Horizontal Menu

Below is the simple list for our horizontal menu. We recommend you keep your list small as too many will stretch wide across the screen and may cause some layout problems. We've enclosed the list in a division called navmenu.

<div id="navmenu">
	<li><a href="<?php echo get_settings('home'); ?>">HOME</a></li>
	<li><a href="wordpress/recipes/">RECIPES</a></li>
	<li><a href="wordpress/travel/">TRAVEL</a></li>
	<li><a href="http://www.wordpress.org">WORDPRESS</a></li>

As you can see, within our list we've included a PHP tag for the "home page" and several categories, as well as a link to WordPress, those helpful folks. The list would look like this, in its simplest form (as styled by the Codex):

  • HOME

You can also use the wp_list_categories() template tag to list your categories. If you just want categories 1, 3, 4, and 5 listed and the rest excluded, your list might look like this:

<div id="navmenu">
 <li><a href="<?php echo get_settings('home'); ?>">HOME</a></li>
<?php wp_list_categories('orderby=name&include=1,3,4,5'); ?>
 <li><a href="http://www.wordpress.org">WORDPRESS</a></li>

The place to put your new list might be just under the header. In WordPress v1.5, open the header.php file in the WordPress Theme folder you are using. Paste the code at the bottom of the file after the header DIV and then save the file.

In WordPress v1.2, open the index.php file and look for the end of the header section and place your list code there.


Applying the CSS

By default, a list runs vertically, each item on its own line. It also includes an image, known as a bullet, before each line. In your stylesheet, we need to add a reference to the navmenu and the first step is to remove the bullet and set our margins and padding to zero for the whole list.

#navmenu ul {margin: 0; padding: 0; 
	list-style-type: none; list-style-image: none; }

If you save and upload your stylesheet, then refresh the test page in your web page browser, you would see that your list now has no bullets and no indents, if everything is working right.

Now, we need to add the technique that will set this list into a horizontal line. We need to add a style reference to the list item itself.

#navmenu ul {margin: 0; padding: 0; 
	list-style-type: none; list-style-image: none; }
#navmenu li {display: inline; }

Because these are links, we have to take a moment to clean up the look of the links. There are many things you can do to style this list, but for now, let's add some space to the list of links so they aren't crowded together and remove the default link underline and have the link change colors when the mouse moves over it.

#navmenu ul {margin: 0; padding: 0; 
	list-style-type: none; list-style-image: none; }
#navmenu li {display: inline; padding: 5px 20px 5px 20px}
#navmenu a {text-decoration:none; color: blue; }
#navmenu a:hover {color: purple; }

Okay, we can't resist. Let's take this another step further and give our new horizontal menu list some real jazz. See if you can tell what is being done to change the look.

#navmenu ul {margin: 0; padding: 0; 
	list-style-type: none; list-style-image: none; }
#navmenu li {display: inline; }
#navmenu ul li a {text-decoration:none;  margin: 4px;
	padding: 5px 20px 5px 20px; color: blue;
	background: pink;}
#navmenu ul li a:hover {color: purple;
	background: yellow; }

If we did this all correctly, your list should look like this:

  • HOME


Without CSS

One should note that the all the above will fail in browsers with CSS turned off: the <li> lists will still be formatted vertically, not horizontally.

Therefore, if one wishes to be portable to such browsers, one might use e.g.,

<p>Archives:<?php wp_get_archives('format=custom&show_post_count=1&type=yearly&after=;'); ?>
Categories:<?php echo str_replace('<br />',';', wp_list_categories('style=&show_count=1&echo=0'));?></p>


How Do I Customize My WooTheme?

This is a question that depends on what you're after exactly with your theme. Powering all of our themes is our WooFramework, this makes it possible for us to include a lot of customizable options in each theme. Meaning you don't necessarily have to touch code to customize your theme. Things like the ability to upload your own custom logo and or background to your theme, choose the typography from Google's webfonts, and many other options included in each theme.

If you're looking for the theme with the most options, we'd highly recommend checking out Canvas as this is by far our most customizable theme within the theme settings.

Outside of our theme settings, you are going to need a basic understanding of HTML & CSS to start customizing the layout and style of your theme. To dig deeper PHP knowledge, specifically to WordPress, will help as well. The WordPress Codex is a great place to start learning.

Finally, when you are ready to customize one of our themes, a child theme is the best approach to take. A child theme will be a place to house your customizations and modifications to it's parent. You'll be amazed at what you can do with a child themes, a basic style.css, and a functions.php file. Here's our tutorial on child themes. There are many resources out there for creating child themes as well, it only takes a quick search!


How Do I Update My Theme?

First note, in every theme package we include a changelog.txt which includes all the changes for each version. This changelog is also available in your downloads page and under each theme documentation. It’s worth reading to see if the changes made are worth an update for you and your site. Of course we always recommend to stay as updated as possible. If you haven’t made any modifications to your theme files, then you can simply overwrite your existing theme files. If you have made modifications to your theme, you will need to study the changelog to see which files need updating. You can also compare your old modified file against the updated file with any good HTML Editor or use an online tool. We’d suggest using child themes in any future theme modifications. This will save you the headache of comparing files and worrying about overwriting your modifications.


I want to use contact form in my language, not in English. How can I do that?

Contact Form 7 has been translated into many languages. See if the languages folder contains a language file for your language.

The locale setting of Contact Form 7 follows the locale setting of WordPress. Once you change the WordPress locale to, Contact Form 7 is also changed. See how to change the WordPress locale here.


How can I drive more traffic to my blog?

There are a couple of components to driving traffic. They are:

  • The actual setup of the blog,

  • Keyword research and targeting,

  • Community research,

  • Ongoing monitoring for keywords and identified blog feeds,

  • Quality commenting,

  • Quality posting,

  • Social media promotion and blogger outreach.

All of these are very important, but monitoring and commenting are the keys to driving traffic.

There are also some other factors that play into the mix:

  • Who you are (commercial vs. independent blogger, due to the fact that many bloggers have their own commercial agenda).

  • How stimulating or controversial you are (do your posts spark discussion or outrage), or how inquisitive / conversational you are (some bloggers have a knack for getting the conversation started by raising questions and then keeping the conversation going. This requires dedication, vulnerability and passion on the blogger’s side because they’re saying ‘I don’t have all the answers’).

So, to answer your question, here are some things to try if you have not already.

  • Optimizing the technical setup of the blog: If it’s a commercial blog, it would be an ideal situation when the blog is part of the company domain. For example, company.com/blog. Let’s suppose that the company website has been around for awhile and this is an advantage over a brand new domain or a company.blogspot.com URL. If a company is going to invest in blogging, they might as well leverage this advantage and let the content and links that the blog generates boost the corporate website’s page rank and overall content footprint. Usually, a sub-folder (.com/blog) is better for SEO than a sub-domain (blog.company.com).

  • Making SEO more than just an afterthought: Also, you want to make sure your blog has some of the Search Engine Optimization (SEO) basics. Each blog post creates a permalink. Make sure the permalink page uses a title tag that includes the title of the blog post. Also, tag and categorize the post with a category or tag name that is relevant but also part of your target keyword list (see next two items for how to discover keywords).  

  • Keyword Research: Do some keyword research around your topic and figure out the relevant terms that attract the most searchers per month. There are some OK free tools out there for doing this: Webmaster Toolkit or SeoBook’s Tools and Gagets. There’s also a commercial product called Trellian which is what my SEO department uses.  

  • Subjective Input: After you have developed your keyword list, give each of the phrases your own relevancy score. You can use a scale of .01 – 1.0. A 1.0 is a dead-on match meaning that this term is very likely to be a qualified visitor. You could give a broad general term like “game” a lower score (because it is likely that only a fraction of the people searching on this term are interested in your what you are offering). You can then use these scores as a way to adjust and filter against your search frequency and post frequency (see next item). You can use Excel to calculate by multiplying frequency by the score.

  • Blog and Social Media Community profiling: Once you have figured out your best list of terms, use Icerocket.com to check the post frequency about those terms. If the term is searched a lot and posted about a lot you know that if you optimized a post around that term then it is likely to attract a larger share of attention. You can also look at it another way. If the relevant term is searched a lot but not posted on a lot, that could be an opportunity to post about something that is of interest to searchers but does not have a lot of completion in the social media search engines like Technorati.com. This means that your post will stay in the social media searches longer because it’s not getting pushed down into obscurity, but generating a high frequency of noise around the term. Assuming that the term is a popular search phase, it’s likely to garner some extra traffic and attention due to the decreased level of completion in the blogosphere.

  • Content Strategy: Think about your audience. What are they interested in and what are the popular blogs that they are reading? Develop a profile of the bloggers who are reaching your audience. Read through their blog and look at who’s commenting and visit their blogs as well. Develop a matrix of the community and really try and identify the influencers and the active participants in the community. Create a blog roll on your site of these blogs that will help the bloggers develop an awareness of your site. Develop a strategy that will lead them to reference some of the work you’re doing (Admittedly, this is the toughest part but that’s the price we have to pay for greatness).

  • Timely Monitoring and Quick Response: Start monitoring all the blogs and important keyword on a daily basis. You should be on the lookout for blog posts that you can add value to by either commenting or posting about. If you see a post that you think you can add value to, comment now and write a post later.

  • Comment, comment comment: A good insightful comment on a popular or even not so popular blog can drive a significant amount of traffic and awareness to your blog. More importantly, comments will help you develop a trust within the community and with that blogger. Don’t assume one or two good comments are going to do the trick. It needs to be a consistent process that is guided by your monitoring. The earlier that you can spot a good comment opportunity and make a comment, the better chance you have of getting your thoughts into the mix and gaining some visibility and respect from the community.

  • Use blogging best practices for outreach: A lot of people talk about how gaining the attention of influencers and getting them to blog about you is a great way to generate traffic. Of course that’s true but some people look at influential bloggers as a PR opportunities (visualize a juicy sizzling steak) and try to pitch them using traditional media relations techniques. This might work sometimes but it could backfire. Developing trust through a comment is a far better approach than directly pitching a blogger to write about you. Then try and develop relationships with not only the big influencers, but some of the more passionate and lesser known bloggers by commenting and reacting and adding value to what they are saying on their blogs. Commenting on blogs is one of the best ways to direct people to your site. Make sure your comment adds value to what is being said.

  • Cultivate Inbound links: The ideal is when this happens naturally; you write a nice post and a blogger finds it and cites your page. That generates traffic and a link. However you can also give this process a nudge. This is a tricky area and it takes a certain chutzpa to do it but reach out to the bloggers and ask them to feed back to you on what you have written. You never know what they’re going to say, if anything, but I think that if you genuinely try to solicit their advices, it’s likely to lead to some link love down the road. I know that this also seems a little like you have an hidden agenda, but really you’re trying to be included in the conversation that’s going on, and sometimes you have to put your client or yourself on the line a little bit. Initially you may receive feedback that’s not entirely positive, but that’s something to build off of.

  • Social media networking: If you have not already developed a presence in the large social media networking communities such as MySpace, LinkedIn, Facebook, MyBlogLog, those are a great resource. Or, target more focused communities that focus on a certain industry. You can also engage in micro blogging with things like Twitter.


Can I see the messages submitted through the contact form?

Contact Form 7 doesn’t save the submitted messages. To manage messages through Contact Form 7, you need to install Flamingo (another plugin created by the same developer).


Yii (36)

How to enable #Gzip compression in Yii?

Enabling Gzip compression in delivering your webpage will improve your sites performance. If you used Yii PHP Framework in developing your website, you only need two lines of code to enable Gzip compression.

In your main.php configuration file, just add the following code:

//GZIP compress   
'onBeginRequest'=>create_function('$event', 'return ob_start("ob_gzhandler");'),
'onEndRequest'=>create_function('$event', 'return ob_end_flush();'),

Now, if you are using Google's PageSpeed Insight to get optimization suggestion for your website, it might still be saying that your page needs to enable compression. As per Google's PageSpeed Insights FAQ:

PageSpeed Insights' results are based on headers that were actually returned to your client, so if you are running the analysis on a client machine that is using such anti-virus software, or that sits behind an intermediate proxy server (many proxies are transparent, and you may not even be aware of a proxy intervening between your client and web server), they may be the cause of this issue.

You can use PageSpeed Insights Chrome extension to verify as suggested from PageSpeed Insights FAQ.


How to change site/page?id=123 to site/page/id

For this you should use urlManager

It is actually very-well documented… URL Manager

The direct answer to the question is – using that rule:

    'site/action/<id:\d+>' => 'site/actionm '

In your example you can set How to change site/page?id=123 to site/page/id$id like this: actionPage($id)

Or you can get it via Yii::app()->request->getQuery('id');


What are the various Helper classes provided by the Yii ?

There are several classes provided by framework:

  • ArrayHelper
  • Console
  • FileHelper
  • Html
  • HtmlPurifier
  • Image
  • Inflector
  • Json
  • Markdown
  • Security
  • StringHelper
  • Url
  • VarDumper
  • Permalink.

What is the naming convention in Yii?

You can define table prefix when using Gii. In your case you need to set it to tbl_. Then it should generate UserController instead of TblUserController.

The Yii Framework employs a class naming convention whereby the names of the classes directly map to the directories in which they are stored. The root level directory of the Yii Framework is the “framework/” directory, under which all classes are stored hierarchically.

Class names may only contain alphanumeric characters. Numbers are permitted in class names but are discouraged. Dot (.) is only permitted in place of the path separator.


Stop browsers from auto-completing registration form fields

Firefox can autocompleting the username and password fields on registration forms, and change password forms. To disable this, you can set the FORM attribute autocomplete to off. On your CActiveForm options, you can set this in htmlOptions:

'htmlOptions'=>array('class'=>'reg-form', 'autocomplete'=>'off'),


How can I make the extension work with CTabView?

Because of how Yii includes the scripts with registerScript, all the variables used for this extension are inside an anonymous javascript function. As such, they are out of scope for the rest of the document.

Because of this, we have to use Yii to insert the code we want to use into this same anonymous function. We can do this by using the same scripts that the extension uses. Replace '#tab2' with the selector for the tab in which the map is located.

$click_script = <<<SCRIPT
        google.maps.event.trigger(gmap, "resize");
Yii::app()->getClientScript()->registerScript("resizemap_js", click_script, CClientScript::POS_END);

This adds an event to the tab to force google map to invalidate and redraw itself as soon as the tag is activated.


What if this field is pulled from the database? How do I put in a SELECT list on my add/edit page?

A common situation would be needing a list of countries displayed in a select list, that are pulled from a database table.

Assuming a model named ‘Countries’ (try generating with Gii), the basic code for the view is the following. It makes use of the findAll() method to query all rows in the country database, and CHtml:listData which generates an array of data suitable for list-based HTML elements and the dropDownList function.

echo $form->dropDownList(


What is Yii?

Yii is a high-performance, component-based PHP framework for developing large-scale Web applications rapidly. It enables maximum reusability in Web programming and can significantly accelerate your Web application development process. The name Yii (pronounced Yee or [ji:]) is an acroynym for "Yes It Is!". This is often the accurate, and most concise response to inquires from those new to Yii:

Is it fast? … Is it secure? … Is it professional? … Is it right for my next project? … Yes, it is!


How do I render a map?


The map rendering is handled by the GeoCode_Result class. It uses its own internal render functions to generate the maps. It also requires javascript to be enabled.


The map types that are rendered need to be passed to the view. These are constants as defined by the map supplier. Only include the constant name, do NOT include namespaces, etc.


It is possible to change the map provider that is used for rendering a specific GeoCode_Result by passing an optional 3rd parameter to the renderMap function with the name of the provider. However, because some map APIs (eg. Yahoo) require an API key to validate access, these maps can only be rendered from a Result derived from their respective driver.

Because this extension is using v3 of the Google Maps API, it does not require an API key to access the javascript. Therefore, a google map can be rendered from any Result object. The same can not be said for the other map providers.


Place the following code into your view

* Yahoo Map Example *

<div id="map_canvas"></div>
// $result is a GeoCode_Result object from a Yahoo Driver
$options = array(
    'mapType' => 'YAHOO_MAP_REG'
$result->renderMap('map_canvas', $options);

* Google Map Example *

<div id="map_canvas"></div>
// $result is a GeoCode_Result object from a Google Driver
$options = array(
    'mapTypeId' => 'ROADMAP',
    'zoom' => 13
$result->renderMap('map_canvas', $options);

* Google Map with Yahoo Result *

<div id="map_canvas"></div>
// $result is a GeoCode_Result object from a Yahoo Driver
$options = array(
    'mapTypeId' => 'ROADMAP',
    'zoom' => 13
$result->renderMap('map_canvas', $options, 'google');


MVC Question: Should I be putting loops and IF statements in my view? I’m getting concerned that this might not be the right place to keep things organized in an MVC sort of way

This is fine, as long as all the loop logic is display-related. Your views are going to contain some conditional logic and loops. But, consider using display widgets for modular areas. Try keeping many not-set/empty checks to display different HTML on the front-end, as well as foreach loops to display an array of a model’s One-to-Many relation. For the general purpose of displaying recent reviews on a site, you can use a method in the model that returns the latest reviews, and two display widgets that use it; one for the home page, and one for a basic unordered list.


Zend (57)

How to include js from controller and view in zend

From within a view file:


From within a controller:


And then somewhere in your layout you need to echo out your headScript object:



How can you set Module name, Controller name, and Action name in Zend framework?



Where is my document root?

The location of your default Zend Server document root depends on the operating system and the Web server you are using:

For Windows

If Zend Server is running on Microsoft IIS – C:/inetpub/wwwroot

If Zend Server is running on Apache – C:/Program Files/Zend/Apache2.2/htdocs

If you changed the location of your Zend Server installation, your document root will be located at <Zend_Server_installation_directory>/Apache2.2/htdocs , where <Zend_Server_installation_directory&gt ; is the location of the directory in which your Zend Server is installed.

For Linux

the location of your document root is defined by your distribution's Apache packages, and will vary depending on your distribution and configuration.

Common locations include:

  • Debian, Ubuntu – /var/www
  • Fedora Core, RHEL, CentOS, Oracle Enterprise Linux – /var/www/html
For Mac OS X



How can I retrieve the view object within a plugin or arbitrary code?

ZF uses an action helper called the ViewRenderer by default. This action helper instantiates and stores a Zend_View object, which is subsequently injected into other objects. The view object is stored in the ViewRenderer's view property. You can get the ViewRenderer instance, and thereby the view instance, with the Action Helper broker:

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer';
$view = $viewRenderer->view;

However, if you're accessing the view early in the dispatch process – before an action is actually dispatched, for example – then you may need to initialize the view first:

if (!isset($viewRenderer->view)) {
$view = $viewRenderer->view;

If you are using and have already initialized Zend_Layout, you can access the view object much more succinctly:

$view = Zend_Layout::getMvcInstance()->getView();

This proxies to the ViewRenderer and performs all of the steps above for you.


How to check whether form is posted or not in Zend framework



What is the expected improvement in performance with Zend Server?

With Zend Server, your apps are already running faster than before. You can squeeze even more performance out of them using the following features:

  • Running jobs using Zend Job Queue allows executing time-consuming jobs asynchronously, removing application bottlenecks and improving end user experience.
  • Using Zend Page Cache speeds up recurring access to PHP pages by caching the entire output of specific URLs.
  • Can't cache the entire page? Use the Zend Data Cache API to avoid computing the same data again and again.


Can I automate the installation of Zend Server using Puppet or Chef?

Yes, via Zend Server's Web API it is fully possible to not only install Zend Server, but also set passwords and licences. Furthermore, when working in a clustered environment, it is also possible to automate the joining of a new cluster node to a running cluster. Given that the Web API is available via command line calls this can easily be integrated into Chef/Puppet scripts.


When do we need to disable layout?

At the time of calling AJAX to fetch we need to disable layout.



How to include css from controller and view in zend

From within a view file:


From within a controller:


And then somewhere in your layout you need to echo out your headLink object:



What is the ‘Web server user’?

When the Web server starts up, its processes will run as a particular user. You can use this user to set permissions for the Web server and PHP to write to various system resources.

The following are the default user values. If you have modified your configuration, use the modified values:

  • If Zend Server is running on Microsoft IIS – IUSER
  • If Zend Server is running on Apache – SYSTEM
  • DEB installation – www-data
  • RPM installation – apache
  • Debian, Ubuntu – /var/www
  • Fedora Core, RHEL, CentOS, Oracle Enterprise Linux – /var/www/html
Mac OS X



Marius Ion ANGEL HOT SOFT LLC (800) 316-7677