Posts tagged ‘CodeIgniter’

2010
06
Mar
Category: Mac, PHP, Website

This took me three days to figure out so hopefully this saves someone else a little bit of time.

The most common use of .htaccess files is removing file extensions, such as index.php, from a website URL. They are much ore powerful than that though. I’m not going to go into the details about what .htaccess files can do, shouldn’t be used for, best practices, or anything else like that. I’m going to show you how to get .htaccess files set up and working with MAMP.

The only requirements are that you have a Mac (that’s the first ‘M’ in MAMP) and the MAMP software already installed. I am using the latest version. MAMP will install everything else you need (Apache, MySQL, and PHP which is ‘AMP’ in MAMP) to get up and running so you can start making your own sites locally.

First and foremost, the location of your website files in MAMP need to go in /Applications/MAMP/htdocs/ That may sound like common sense but that’s what took the longest for me to figure out. I had my files in /Applications/MAMP/bin/mamp/ which is where all of the files for the start page is located. I just made a folder inside there and was going to the site at http://localhost:8888/MAMP/myfolder No matter what I did, the .htaccess file would not work at all from within that directory. So make sure your websites files are in /Applications/MAMP/htdocs/ or a folder within.

The next thing you need to know is ‘htaccess’ isn’t the file extension and there isn’t a file name on the file. The dot at the front typically means it is a hidden file on Unix based operating systems (which the Mac is). So you will need to show the hidden files on your machine. There are a few ways to do this. One of the easiest ways is to use a Dashboard widget. Hidden Files Widget is a great widget for this. If the hidden files are hidden, the button will say ‘Show’. If the hidden files are visible, the button will say ‘Hide’. It can’t get any more simple that that. Install the widget then click the ‘Show’ button. Sometimes the desktop icons won’t come back automatically. If they don’t come back after a minute, click on the Finder icon in the dock and they should come back. Now, go to wherever your website files are located. If there is a .htaccess file in the folder, skip the next paragraph. If it is not there, read the next paragraph.

Here is the catch. It’s tough to create a .htaccess file because the Mac thinks ‘htaccess’ is the file extension but you didn’t give the file a name. So it won’t just let you do it. Wordpress creates a .htaccess file for you when you set up a blog locally. I believe Drupal does the same thing but I’m not 100% positive on that. Other applications possibly do as well. If you aren’t installing a CMS like that, you can always create a custom one and download it. Below is a very basic example of a .htaccess file that I typically use. Once you have a .htaccess file, put it in the root of where your website will live.

The .htaccess file can be opened with TextEdit. You can open it with Dreamweaver or almost anything you want. Here is an example of a typical .htaccess file

1
2
3
4
5
6
7
8
9
10
11
# BEGIN My_Website
<IfModule mod_rewrite.c>
	RewriteEngine On
	#RewriteBase /
	RewriteBase /mywebsite/
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule . /index.php [L]
	#RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
# END My_Website

The hash marks (#) are comments. I’ll talk a little about the second and third commenta in a second.

If you are developing a site locally, your files may not be in the root of the /Applications/MAMP/htdocs/ folder since you may be working on more than one website. That is what the RewriteBase is for. It specifies where the root of your website is in accordance with the root of the domain or local root. In this example, my website and it’s files are in a folder called mywebsite which is inside my /Applications/MAMP/htdocs/ folder. Since /Applications/MAMP/htdocs/ is my root folder, I don’t have to put that in the path. I just have to put the path from the root folder. If you notice, on the line above that (line 4), I have commented out that line with a hash. When you upload the files to your website, uncomment this line (line 4) and comment out the line after it (line 5). That way the .htaccess file works when you get it on the actual site. If you are not uploading the files to the root of your website, set the path accordingly.

The third comment (line 9) is a variation of the line above it (line 8). Both work pretty much the same. You don’t have to have the first and last comment lines. You can delete them and it won’t effect anything.

That is literally all I had to do to get the site working. I saw sites that wanted me to edit httpd.conf files and php.ini files and all kinds of files under the sun. I didn’t have to though. If you do need to mess with those files, there are a couple pretty good walkthroughs to help you out here and here.

2009
20
Dec
Category: CodeIgniter, Work

I am working on some stuff for work (yes, on the weekend) that uses the Codeigniter Template Parser class to display content with pseudo variables. I have a pseudo variable parser that allows me to call up a certain function from a certain helper file. To do this I would do something similar to this:

{ns:gallery['foo']}

Where “df” is the name of the helper file (minus “_helper”) that gets loaded in if it hasn’t been already, “gallery” is the name of the function, and everything inside the brackets are values that get passed to the function.

I also thought about doing something more like HTML tags with pseudo variables. So the above example could be:

{ns:gallery name='foo'}

Similar concept but this way all of the attributes could be thrown into an object when it gets o the function so I can have as many or as few settings in it as I want instead of having to pass a certain number of arguments in a certain order. I would have to have default values for everything in case an attribute I needed wasn’t passed. Same idea as the way HTML tags work.

This is basically like creating my own pseudo HTML tags with { and } instead of < and >. So then I thought, why not make it a namespace tag? I would just have to replace the { and } with < and > and I get:

<ns:gallery name='foo' />

To do this I would so something similar to this post titled ‘Parsing Custom Tags With PHP‘.

There are advantages and disadvantages to all three. Right now I am leaning more toward the second or third options because if someone goes in after me and needs to edit the file, I think that makes more sense than the first way. Any way I go it just means extending the Codeigniter Template Parser class. Maybe I’ll do all three and release it to the Codeigniter community.

2009
20
Oct
Category: CodeIgniter, PHP

I was playing with CodeIgniter routing at work. I wanted to have a catch-all route but I needed to exclude a certain controller, or controllers, from that catch-all route. As an example, I wanted to have http://www.example.com/(ANYTHING) route to the “page” controller. http://www.example.com/policies/shipping would route to the “policies” controller and then to the “ship” method. From there the “page” controller would split up all of the segments.

I started out with this:

$route['policies/shipping'] = "policies/ship";
$route['(:any)'] = "page";

The “policies/ship” route would be caught by the “policies” controller and everything else would be caught by the “page” controller. Except the “page” controller was getting everything.

I needed to exclude certain controllers from the catch-all route. After a Google search, I came up with nothing. So I started working on it myself. Here is what I cam up with:

$route['policies/shipping'] = "policies/ship";
$route['^(?!policies|controllerA|controllerB)\S*'] = "page";

So far it seems to work perfectly. Hopefully this helps someone else out.