Easy and practical approach to change/re-write URLs in Yii - url

I've read pretty much everything about Yii, such as Ullmans book, the guide, on several forums and of course exploring the framework files. As I'm learning to program at the time I do however rely on pratical examples to connect with the theory and I can't seem to find any useful on the Yii URL part (almost all examples is about removing index.php or shorten the URL).
So I'm kindly asking anyone to give me a practical example on how to change e.g.
http://www.domain.com/Yii/index.php/programsgames/739
Into
http://subdomain.domain.com/?title-of-item/title-of-category/title-of-main-category/739
And perhaps discuss if it's best to change in CUrlManager.php or in .htaccess?
I could imagine that a lot that could benifit from this example as it includes a subdomain, an URL change and additions to in as well. Hope that I'm not way off!

To remove index.php you should add 'showScriptName'=>false, in urlmanager array in your config file.
For formating path maybe something like this could be used.
'http://<subdomain:\w+>.domain.com/<item-title:\w+>/<item-category:\w+>/<main-category:\w+>/<id:\d+>' => 'yourcontroller/youraction'

Related

Code-Editor Plugin

I'm looking to find some kind of plugin similar to this plugin stackoverflow uses to ask questions. Allowing the person who is asking the quesiton to customize his/her question with code, images, bold letters, etc..I like how it knows that your typing code when you tab once or twice for example. I would be using it for an mvc4 project to let users type tutorials with a little code in there description. I tried looking at code mirror but it seems way to complicated to use. Are there any simple ways or plugins I can implement something like this into a textarea or some kind of input? Thanks for any adice
Here's a few libraries that you can take a look at:
http://steamdev.com/snippet/
http://www.tinymce.com/
http://codemirror.net/
Personally I use the first one. They are all easy to implement though, what problem did you experience using codemirror?
FWIW, the editor that is used on StackOverflow is open source so you can incorporate it into the site you are working on. The editor uses markdown syntax instead of full on HTML (such as TinyMCE) so it's a little more limited in what kind of formatting it supports. Whether it serves your needs or not will depend on how rich an editing experience you need to provide and how complex the resulting output needs to be.

Creating a library application - which method to use?

I was hoping to get some advice. I want to create an application which is like a library that holds a lot of different information including documents, pics etc where a user can log in and search for different topics and see the definition of terminology. For example users would be able to click on the word 'electical current' and a definition of electrical current would appear with also links to supporting information. The user will not be allowed to edit any information only read it.
I am wondering what is the best language to use to do this? I know that storing all the information in a html file is definitely not the way to go. But I am not sure what to use - whether html linked to a database is a good option (I've heard that this is also not great because your database code is still accessible) or whether ror is a good option. I decided that ror would be a good framework to use but I still have some doubts such as:
the application will not be hosted on the internet but only on an intranet would ror still be good for this?
the 'site' is basically static except for a few users who will have admin access although it may have more user specific functions later on.
Any advice would be great. Thanks in advance.
It seems to me that a wiki type system would be fit for your purposes. You can create one without writing any code by using a free service such as Google Sites.
I agree with #Finbarr that your problem statement sounds like it could be solved by a wiki.
I suggest mediawiki since it is open source--you can add to it or change the core software if necessary.
Or any other opensource wiki could be used. See wikipedia article
Re: which language: your problem statement is pretty broad. From what you've told us, any language would do.
Best advice: find the open source wiki that most closely meets your needs and then learn the language that it was developed in. Usually that's php or perl. But you can also find Ruby on Rails wikis such as Instiki
Added: Welcome to Stack Overflow. Note that your question is quite broad. So it may get closed for not being specific enough. Stack Overflow is aimed at answering specific questions about software programming. See the faq.

What makes an effective URL Mapping implementation and why?

I am looking at implementing URLMapping for a personal project. I am already aware that solutions exist so please do not answer suggesting I should use one.
What I want is to harvest the opinions of fellow developers and web users on URL mapping implementations. Specially I would like you to answer:
Which is your favourite implementation?
What do you like about your favourite implementation?
What do you not like about your favourite implementation?
How would you improve it?
I would like you to answer from two points of view:
As a developer
As a user
I would be grateful for any opinions on this matter, thanks!
I've only worked with django's URLConf mechanism. I think the way it relies on the urlpatterns variable is a bit flimsy, but I like its expressiveness in specifying patterns and dispatching to other url configurations. I think probably the best thing is to figure out your URL scheme first, and then try out a couple of solutions to see what matches best. If you're going hard-core REST using the full complement of GET/POST/PUT/DELETE, and checking the user agent's Accept headers, and all that, django will, by default, have you splitting your logic between URL config files and view files, so it might not be the cleanest solution.
However, since it's all Python, you might be able to do some more complex processing before you assign to urlpatterns.
Really, you want a system that does what you need. Your URL scheme is your API, so don't compromise on it based on the tools you use. Figure out your API, then find the tools that will let you do that and get out of your way.
Edit: Also do a google search for "URL scheme design." I found this without much effort: http://www.gaffneyware.com/urldesign.htm. Not comprehensive, but some good advice gotten from looking at what flickr does.
Well, I should have noticed the url-routing tag shouldn't I? :-) Sorry about that.
jcd's experience mimics mine - Django is what I use too.
I like the fact that the routes for an app reside within the app (in urls.py) and can just be included into any projects that might make use of that app. I am comfortable with regular expressions, so having the routes be specified in regex doesn't phase me (but I've seen other programmers scratch their heads at some more uncommon expressions).
Being able to reverse a route via some identifier (in Django's case by route's name) is a must. Hardcoding urls in templates or controllers (view in Django) is a big no-no. Django has a template tag that uses the reverse() method
The one thing I wish I could do is have the concept of default routes in django (like Rails does or even Pylons). In Django every route has to map to a view method, there is no concept of trying to call a certain view based on the URL itself. The benefit is that there are no surprises - your urls.py is the Table of Contents for your project or app. The disadvantage is that urls.py tend to be longer.

Django, Rails Routing...Point?

I'm a student of web development (and college), so my apologies if this comes off sounding naive and offensive, I certainly don't mean it that way. My experience has been with PHP and with a smallish project on the horizon (a glorified shift calendar) I hoped to learn one of the higher level frameworks to ease the code burden. So far, I looked at CakePHP Symfony Django and Rails.
With PHP, the URLs mapped very simply to the files, and it "just worked". It was quick for the server, and intuitive. But with all of these frameworks, there is this inclination to "pretty up" the URLs by making them map to different functions and route the parameters to different variables in different files.
"The Rails Way" book that I'm reading admits that this is dog slow and is the cause of most performance pains on largish projects. My question is "why have it in the first place?"? Is there a specific point in the url-maps-to-a-file paradigm (or mod_rewrite to a single file) that necessitates regexes and complicated routing schemes? Am I missing out on something by not using them?
Thanks in advance!
URLs should be easy to remember and say. And the user should know what to expect when she see that URL. Mapping URL directly to file doesn't always allow that.
You might want to use diffrent URLs for the same, or at least similar, information displayed. If your server forces you to use 1 url <-> 1 file mapping, you need to create additional files with all their function being to redirect to other file. Or you use stuff like mod_rewrite which isn't easier then Rails' url mappings.
In one of my applications I use URL that looks like http://www.example.com/username/some additional stuff/. This can be also made with mod_rewrite, but at least for me it's easier to configure urls in django project then in every apache instance I run application at.
just my 2 cents...
Most of it has already been covered, but nobody has mentioned SEO yet. Google puts alot of weight on the URL itself, if that url is widgets.com/browse.php?17, that is not very SEO friendly. If your URL is widgets.com/products/buttons/ that will have a positive impact on your page rank for buttons
Storing application code in the document tree of the web server is a security concern.
a misconfiguration might accidentally reveal source code to visitors
files injected through a security vulnerability are immediately executable by HTTP requests
backup files (created e.g. by text editors) may reveal code or be executable in case of misconfiguration
old files which the administrator has failed to delete can reveal unintended functionality
requests to library files must be explicitly denied
URLs reveal implementation details (which language/framework was used)
Note that all of the above are not a problem as long as other things don't go wrong (and some of these mistakes would be serious even alone). But something always goes wrong, and extra lines of defense are good to have.
Django URLs are also very customizable. With PHP frameworks like Code Igniter (I'm not sure about Rails) your forced into the /class/method/extra/ URL structure. While this may be good for small projects and apps, as soon as you try and make it larger/more dynamic you run into problems and have to rewrite some of the framework code to handle it.
Also, routers are like mod_rewrite, but much more flexible. They are not regular expression-bound, and thus, have more options for different types of routes.
Depends on how big your application is. We've got a fairly large app (50+ models) and it isn't causing us any problems. When it does, we'll worry about it then.

URL Etiquette: can all my urls end with .php?

Given my new understanding of the power of "includes" with PHP, it is my guess that ALL of my pages on my site will be .php extension.
Would this be considered strange?
I used to think that most pages would be .htm or .html, but in looking around the net, I am noticing that there really isn't any "standard".
I don't really think I have a choice, if I want to call my menus from a php file. It is just going to be that way, far as I can see... so just bouncing off you all to get a feel for what "real programmers" feel about such issues.
The thing that actually matters to the browser isn't the file's extension; it's the MIME Type that it gets sent in the HTTP headers. Headers are data that gets sent before the actual file and tell what kind of data it is, how big it is, and a bunch of other unimportant junk. You can configure your server to send any file extension as an HTML page, but the most common extensions for HTML pages are .htm, .html, .php, .asp, .aspx, .shtml, .jsp, and several others.
As for it looking "strange", a surprisingly small number of users will actually look at the address bar at all, let alone notice that the file extension is .php instead of .html. I wouldn't worry about it if I were you; it really doesn't make a difference.
generally - make sure your URLs are easily read, reflect the content beneath them, and don't change. the "not changing" part can be tricky, especially when you shift technologies over time (html>php>aspx).
to achieve this just ensure that each area of your site appears to reside in its own subdirectory.
mysite.com/news/
mysite.com/aboutus/
mysite.com/products/
etc.
you can either do this by physically structuring your site in this fashion and using default documents (default.html/php/aspx), or using something like mod rewrite, ISAPI rewrite, or similar to rewrite these paths to the appropriate docs.
someone who's keen on SEO or marketing might have a different idea about what constitutes a "good" URL, but as a developer this is how i see it.
Ending URLs in .php is fine technically, but I think these days many people are trying to make the urls independent of the actual code/file structure.
I actually think that's a good thing from a software engineering perspective as well. URLs are conceptually different (read: not related at all) to the file/directory structure used to organize the system powering the website.
The "resource" that a URL "locates" is not the .php or .asp file that contains the code to display it.
Look at stackoverflow for example, the URL of this question is /questions/322944/uql-etiquette, there's nothing in it that can be used to "guess" the underlying framework/system. The resource in this case is the question and all the answers to it, as well as the comments, votes, edits, and various other stuff.
It doesn't matter what your URLs end with, .php is fine, and fairly common. The only thing people care about these days when it comes to URLs is making them pretty for Search Engine Optimisation, but that's a whole new question.
Real programmers use URLs like /noun/verb/id/ & don't show file extensions at all :p
Personally I use Apache's mod-rewrite.
(on a slightly less tongue-in-cheek note) It's worth mentioning, specifically for includes, that you should ensure your actual files have the extension .php. I've seen more than one site where programming logic can be viewed in-browser 'cos the developer ended their files .inc (or insert non-auto-parsed extension of choice here).
As far as url etiquette goes - I really don't think etiquette is involved; however if you have sophisticated users visiting your website who have strong views on platforms and technologies, using .php or .aspx extensions could put off users - perhaps subconsciously.
If you use apache, it's fairly easy to make a .php be read as a .py and vice versa by changing the httpd.conf file. My current practice is to use .html extensions (or no extensions at all) and treat all files as .php.
Whatever you decide, do make sure that you never break an existing url. It's possible to achieve that even if you keep .php as the extension and decide to change the technology later.

Resources