Best way to integrate PHP forum into Django site? - django

Suppose you are running a Django site, and have a legacy PHP forum to support and integrate into your site, since current Django forum solutions are not mature enough.
What is the best way to do this?
Currently I have a simple view, which renders a very simple template which extends my site's base template, and the content area has nothing but an <IFRAME> which holds the forum as its src. A small jQuery function is used to maximize the <IFRAME>'s height (once it finishes loading) so as to contain 100% of the forum content.
But all of this sounds pretty awkward. How would you go about this?

There are a few options. None are ideal (but mixing two platforms never is!)
Use iframes as you've suggested (bad as the address in the address bar is always that of the django page and if somebody copes a link off the forum, it will be the PHP forum, not the django holder)
Use iframes but instead of using the same src all the time, parse the URL and append the relative bit onto the src of the iframe. ie if django sees /forum/this-url, set the src to http://forum-address/this-url and make sure all your links target parent. This has the advantage of showing the correct link in the address bar at all times (rather than it always being /forum/). You'll need to hack your forum for this to work.
Proxy the content and inject it into the page properly. You'll need to pass cookies and it might get really messy but in most terms, this is a great way to integrate things because your links will always be correct. You'll need to butcher your forum theme to strip out everything outside and including the <body> tags.
Theme your forum in the same way as the Django site. This would give best performance but you might have issues if you use dynamic stuff in your django template. An option to get around this is by having the django template cache things to memcache and using php-memcache to pull them out into your forum template.
I have done both 3 and 4 in the past. I used 3 for a very simple form (so didn't have to deal with cookies and sessions as you will). I used 4 for integrating a FluxBB forum into a Wordpress install. Both PHP but it would be uber bloat to load FluxBB inside Wordpress. I cached the dynamic template things into memcache and pulled them out in the forum template.
For this, I would probably suggest going with #4. It's a pain in the arse having to maintain two themes but it's by far the fastest performing solution.

When I read the question summary I immediately thought that you would need some kind of script, which could be linked to a signal via the Dispatcher in Django, to syncronize the user database from your Django site to the forum. This would keep the authentication side of things in check - but you still need to do one of the things that Oli has suggested, to make them look the same.
Themeing will probably be the least hassle-free route, but that's not to say it will be easy!

Related

Video site using Wagtail

Want to build a video site like YouTube or peer tube but on my lan completely private, basically I want to pretend my kids are online when their not... plus a good project to learn.
A video based website would be easy to make. You could do this quite easily with a few Wagtail Pages, uploading videos as Documents and using a DocumentChooserPanel to select a video on each page.
To get started you'll want to start in two places:
The wagtail docs, available at http://docs.wagtail.io/en/latest/getting_started/tutorial.html, and
For additional tutorials https://wagtail.io/course/
Take it slow at first, get your virtual environment setup. Then move on to creating your first Wagtail Home Page and adding a few custom fields, then make them show up in the home_page.html template.
For future reference, when you ask questions on StackOverflow (or anywhere else) make sure you add more detail to your question. Including what you've done/tried so far, your end goal, or any problematic code you're working on will help you get answers faster and it'll generate better answers than mine.

Integrating django apps in your own views

Let's say I'm writing a complex site in django with wikis, forums, ... or writing my own apps that I intend to reuse from different sites.
I really want to create, for example, a wiki page that has a forum at the bottom, or reuse my previously written wiki app with a different graphical layout.
What is the best way to structure my app to allow this kind of reuse?
So far, I have been giving apps their own urls in urls.py. This however does not work if I want to combine multiple apps together in a single page.
Additionally, most of the apps I found online come with their own templates, which has the full html, and do not separate the logic of creating / preparing a context from that of handling a request and generating a reply.
What is the best practice here? What do you do? edit the templates that come from applications you download online? refactor them to fit in your application?
what should I do for my own applications? structure them so they have a method to get the context, and a method to render it?
Django hasn't great support out of the box to component-oriented architectures. I find this problematic some times too. You'll face to problems here.
Architecture
Code
Architecture: As Django is not component oriented, all the apps aren't component oriented neither. The designers and coders for those apps haven't thought about that. So they've just built "views" to interface with their apps. You'll need to get something more "pluggable".
Code: Once you decide to build that, you'll have to find what support you have for that. Most Django apps are pretty well coded, so you won't have much code in views, but abstracted in other places. That way you could reuse that code and build your own components.
Example: Suppose you're working with a third-party Wiki app. That wiki has a view to display highest ranked Tags and other view to create a wiki entry. If the code is good enough (that I'm assuming it is because Django has a pretty good community), you could refactor that to use components. The view to create an entry must be using some Form, that you can plug in your own site. And the view to get highest ranked tags probably uses some utility function, or some Tag manager's method. In that case you could refactor it to your own needs.
Hope it helps.

Django simple-pages stable or not?

I want to create a pretty simple site with a few pages using Django. I guess I could use Wordpress. But there is some custom stuff (like a special kind of calendar app) that I rather do in Python than PHP.
I came across simple-pages which seems like a nice middle way between flat-pages and a fullblown Django CMS (which just seems overkill). It can automatically generate menus. But it seems like it hasn't been updated in a long time. Is it deprecated or is it stable? Or do flat-pages have the same functionality these days?
Honestly, It would be super easy to build your own small custom CMS since you know python. It would only take a few models and not a lot of time - the result being something better customized for your needs.
I've used some of these examples before - and they work ok, but I always find myself having to add something more.
One idea is to check out what sub-applications some of these things are using - maybe import only what you really need.
But I almost always find myself spending a LITTLE extra time to build out my own schema/structure for simple pages Then using a nice admin skin like grappelli when handing it over to clients (you get SORT of that wordpress feel (sort of))
Lots of admin customization that can make it easy for clients (and You) to work with static pages.

using a static website generator for a blog on a dynamic website?

I'm looking into having a blog/content section on my dynamic website. Is it sensible to use a static website generator like Hyde to generate the "static content part" of the website?
Advantages would be:
easy/simple for a few other people to submit articles
performance
using a similar stack as the rest of the website - in my case, using Hyde and the same syntax as django templates
I would use the flatpages app for this. With the flatpages app you can still put your content (blog posts) directly on the HTML but you'll have the advantage of templating (using you base site template or just a custom one for the blog). You'll also be able to keep track of how many pages there are on the admin panels. You can also "outsource" comments to something like Disqus and maintain a dinamyc feel.
Still I would really think about the reason why you're doing this. Getting a blog post from a db isn't a very performance shattering operation unless your server is overly strained as it is.
You'd be far from the first person to do this. It still very much feels to me like Ruby's Jekyll (of which Hyde is a Python 'port' of sorts) is a bit more ahead in this regard, but I also come from a Python / Django background and can understand the desire for some homogeneity.
Most examples I can think of are done with people using Jekyll, but this blog post covers one person's move from WordPress to Hyde that they seem quite happy with, and there's also this Hyde blog, both of which potentially have some useful advice for you. Disqus seems like the comment platform of choice, and you integrate it simply by embedding some JavaScript in your site, hence it's a beautiful solution for a static site.
Realistically I can't see "performance" as a major issue; I may be doing you an injustice here, but it generally seems like those with enough blog traffic to cause performance issues are in the state where they've got the cash to lob a caching layer / extra servers at it. For me, the advantage has been in the flexibility of hosting (pretty much anyone will host static HTML for you for very little) and 'security' (the only thing executing server-side will be the webserver).

Beginner: Do I have to use templates when implementing my own designs using CMS such as Joomla?

Brand new to CMS:
With Joomla or other CMS, If I want to use my own design, do I have to make it a template first using proprietary code of some sort = ie using some Joomla templating language - or is using my own design with Joomla simple and independent?
I am not sure the role "templates" play with Joomla and other CMS. I gather they can be used as a complete "pre-made" design where you just tweak it, but are they necessary as a base of some sort to using my own designs? I am proficient with HTML and CSS. I also have been playing around with various Jquery Plugin's for my UI.
Ideally I would like to create any design I can think of with any layout I create and use CMS simply for its database and plugins etc such as a blog or calender back end. I might use it for more features as I learn about them. Do I need to use a "template" or create a "template" to do this?
Thanks!
{edit}
You have to create a template (or change an existing one), how else will the CMS know where to add the information into as the template is a HTML, CSS and Javascript Page group devoid of information and some HTML Tags replaced with CMS Specific tags, which tells the CMS where to add the information. It also include certain files telling the CMS the Name, and othe information of the template.
The First step in creating a template is to have a design.
Do your design in HTML and CSS. (Preferably using the CMS Template folder/directory structure.)
For Joomla use the information in this post: How should I go about writing a Joomla! template?
In Joomla jQuery have to be used in compatibility mode.
The CMS will supply the information, you supply the design and tell the CMS
{/edit}
The Template is the design container, whether you create one from scratch or reuse a current template. I initially used one of the pre-installed templates (together with the documentation) to learn some of the complexities of designing the template. (ex. structure, and what is possible.)
Please also look at my answer to this question How should I go about writing a Joomla! template? as it is a pretty good beginners guideline for template designers in Joomla (Even if I have to say it myself) with a couple of other resources linked in as well.
A Joomla template is nothing but HTML layout stylised using CSS. So to create your own templates you need a good grasp on HTML and CSS.
Joomla, by default provides a couple of templates to start with.
If you are just beginning, creating your own template is not where you want to start...learn more about setting up Joomla. You have enough problems there :)
Joomla! 1.5: A User's Guide is a great beginner book. It takes you through learning Joomla, what templates are, how to make them, and even walks you through setting up WAMP so you can experiment on your local machine.
The templates only affect the styling of your site. If you are starting out, I would work on getting your content in place first and wait on templates until later on.
My experience has been revamping my two websites to use WordPress, then moving to ModX, then moving back to HTML. I believe that you don't need a template but it will make some things easier as it bundles a lot of stuff you'd otherwise have to do manually. --At least for WordPress. I'm not even sure we found a good ModX template but adapted [poorly] a WordPress one. ModX is a good but little known CMS.
With one of my sites I found that it was impossible for WordPress to handle the images, thus I began working with a plug-in developer to create a custom plug-in. He took about a year and it still wasn't useable. Also I hired some consultants along the way. Their biggest contribution was "to complexify things" so I couldn't make any changes myself without going back to them & paying hundreds of $ to change a phone # for example.
I chucked all that and redid everything in HTML5 with Javascript, css and a little php. People here on S.Overflow actually helped me with the coding. I have a 3rd simple site that I may go back to WordPress for but only to use some particular functions which might be a pain to program otherwise.
Here is one of my 2 HTML sites:
coinsandhistory.com