Simple function for drawing HTML dropdown list from various sources

If you’re still lurking in the darkness of writing code with pure PHP and not using any framework then in this post you can find some nifty function, useful for drawing a HTML list boxes.

Basically it tries to render (draw) a <select> element basing on input data provided in $source variable. It can be either a list (key=>value) or string, where values and items’ texts are separated with delimiter. Such string can be provided directly or read from file. In this case you only provide path to a file (source of data).

Read More “Simple function for drawing HTML dropdown list from various sources”

Grouping controllers without using modules

Basic Yii application’s route consists of controller and action. Sometimes you have to add an extra separation layer, to group controllers and actions belonging to separate groups. Not everyone know, that you don’t have to use modules for this purpose. Controllers subdirectory can also be a considerable option. For me, this was a nifty discovery, so I decided to write this down as a personal memo.

Read More “Grouping controllers without using modules”

Multi-site multi-language Markdown-styled WordPress network

I’ve set myself quite big goal. To setup:

  • multi-site WordPress network (with top-level domain mapping),
  • with multi-language support,
  • that will use Markdown,
  • with auto-generated table of contents, based on headers and
  • with “coming soon” / “under construction” page for not ready sites.

To achieve my goal, I needed a bit tweaked version of WordPress (network) plus a bunch of plugins.

Read More “Multi-site multi-language Markdown-styled WordPress network”

Object-oriented plugin template for WordPress

I love WordPress, but the worst thing about it is that it is written with the most shitty code, I have ever seen.

WordPress development started years ago, and though during past years object-oriented programming has become de facto standard, WordPress still remains full of shit code and shitfull coding techniques. I can understand it about core code. After all — rewriting whole WordPress to OOP could be too big piece of cake. But I completely can’t understand it, why plugin’s authors follows this and write their plugins with pretty much the same shit code?

In this situation, any attempt of making things better is very welcomed (at least by me). The Object Oriented Plugin Template Solution plugin (or actually — plugin template), I ran into today, sounds like such promising star in a dark, dully sky of shit-code.

I recommend this plugin template to every WordPress plugin author. Even though it’s pretty new (published today) it looks very, very promising.

Sending app written in Yii through Gmail

Just a small notice, if you’re ever going to send a Yii application through Gmail. Make sure, that you browse archive, that you’re about to send, and delete all *.bat files from framework folder. If you miss that, Gmail will refuse to send email with such attachment, due to “executable file inside”.

Pity is, that this error pops up after attachment is uploaded to Gmail. An archive containing full framework code can take 10 MB or more and can waste some time to attache it to Gmail.

JS and PHP or Yii photo manipulation libraries

I was faced with a problem of picking a good photo manipulation library. Either client-side or server-side. Both for working with my newest Yii project. This article is a summary of my quick research in this field.

All JavaScript libraries works on Canvas, so require HTML5 and Canvas-enabled browsers. Most modern browsers supports both of them in newest versions.

The only PHP image manipulation library works mostly on uploaded image.

Read More “JS and PHP or Yii photo manipulation libraries”

When PHP code should really be treated as unsafe

Yesterday I took a part in interview for PHP developer position. My interview task was to solve fifteen questions in quite simple test. One of the questions was to decide if given code sample be treated as unsafe and in which conditions.

I gave a wrong (as it turned out) answer and the argumentation from the intervieerw was quite surprising for me in the first time. Finally I realized my mistake.

Read More “When PHP code should really be treated as unsafe”

Alternative module configuration that does not affect main configuration

In Yii main application is actually a module (core one) so each module configuration actually shares nearly everything what you can put to main application’s configuration file.

Thus, you can configure any Yii module, just as you would do with your main application. The only difference is that you don’t use external configuration file, but CModule::configure() function instead.

Read More “Alternative module configuration that does not affect main configuration”

Passing current or last page full URL as a part of URL

By using five separate PHP functions, in correct order, you can easily pass (code and decode) entire page’s URL as a parameter of any other script call, redirect etc. And be sure that it will be read (decoded) correctly, no matter, how long your URL is or what kind of characters it is using.

You can encode any URL (current page, last visited page or any otherwise important) and pass it in another URL in the way that your user won’t notice that you’re actually passing an URL.

Presented solution can potentially be used as URL shortening service. Generated URLs aren’t that short (as maybe expected), but for really long URLs it does provides some shortening.

Read More “Passing current or last page full URL as a part of URL”

CMarkdown usage examples

You can use CMarkdown class as typical Yii widget:

[code language=”php”]
<?php $this->beginWidget(‘CMarkdown’); ?>
_Markdown_ *example*
<?php $this->endWidget(); ?>
[/code]

or directly as a function:

[code language=”php”]
$text = ‘_Markdown_ *example*’;
$md = new CMarkdown;
echo $md->transform($text);
[/code]

That’s pretty much everything, folks!

Convert CActiveDataProvider to associative array

Here is an example on how to convert CActiveDataProvider to a simple associative array.

[code language=”php”]
$dataProvider = new CActiveDataProvider(‘Users’);
$data = array();

foreach($dataProvider->getData() as $r)
{
$rowArray = array();

foreach($dataProvider->model->tableSchema->columns as $c) $rowArray[$c->name] = $r[$c->name];

$data[] = $rowArray;
}
[/code]

Columns names are read from table schema, so you don’t have to know table (model) structure to use this.

Missing colon in field’s labels

By default, Yii renders all forms with field’s labels not containing colon after label. This may be unwanted effect for some. The easiest way would be to change field’s label to contain that missing colon. But, that would produce an even more unwanted side-effect of having that colon included (as part of field label) in error message, when validation fails. Here is my simple workaround for this problem.

Read More “Missing colon in field’s labels”

Correcting code completion in NetBeans

General code completion in NetBeans works quite good (expect for its speed), but since NetBeans was made for Java and has only “added” support for PHP then it has some issues code completion for PHP and for coding in Yii framework it fails nearly completely.

Here you’ll find approach to fix this and make Yii developers using Netbeans life a little bit easier.

Read More “Correcting code completion in NetBeans”