SitePoint Sponsor

User Tag List

Results 1 to 7 of 7
  1. #1
    SitePoint Addict
    Join Date
    Nov 2000
    Location
    London, UK
    Posts
    223
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Designing an Online Website creator for teachers

    Hi all,

    This post is basically a request for help from all of you bright PHP-minds out there. I need to develop a web app that allows teachers to create websites, and that will then publish those sites into a folder somewhere on the server.

    The teacher's site can consist of several courses, each of which contains several pages. A navbar will have to be automatically updated as they add or remove courses and pages, to keep track of everything.

    The pages will consist of the teacher choosing among a list of available page types (e.g. "Three columns of text with pic" or "Homework Page"), and then filling out content for that page. They will also be able to choose from preset styles (for example "Funky Blue" or "Hip Yellow") that will color and fontify the page differently.

    Finally the pages might be dynamic (e.g. a Calendar, or a Grades page where kids login and see their grades), or static ("Syllabus" page, for example)

    Here are some features that it will need:

    - Many teachers have to be able to login, and edit their own personal site

    - The templates ("Calendar","2 Columns of Text","Photo gallery", etc.) have to be dynamically add-able by an admin, with no new programming necessary (aside from any programming that might be part of the template itself)

    - The templates need to be able to be either dynamic web-apps within themselves (e.g. a BBS, or a Guestbook, Calendar, etc.) or static (e.g. "Image with text description", basically just HTML that needs filling in)

    - The styles ("Hip Yellow","Blue n' Orange", etc.) have to be addable simply by somebody adding new html information into a file or folder somewhere: once again no new programming of the core thingy. Once a style is added, all existing templates need to be able to be used in the new style ... thus functionality is being separated from design

    - The administrator (i.e. me ... not a teacher, basically) has to be able to add new teachers very easily, and manage them, etc. etc.

    - There needs to be a way to categorize the teacher's sites and list them, either by course or by teacher

    - The teacher's editing of things needs to be secure, as we don't want students logging into their sites and changing stuff.

    - As pages and courses are added and removed in the teacher's site, a navbar needs to be updated accordingly that is displayed in the published site

    - The program needs to continuously publish changes that the teacher makes to the publishing area, where it will publish static html for most things, except for dynamic features like calendars, photo galleries, grades, etc.

    - Data storage doesn't matter too much, but it doesn't need to be particularly fast: speed of development is preferred over speed of execution here. I was thinking of using something like XML files stored in a secure location on the folder, simply because of their tree-like structure which is similar to my tree-like structure of user->courses->pages, but anything works, really

    If anybody has any good suggestions on what sort of a design I should use (e.g. what kinds of classes I might have, how I might allocate the work among the pages and objects, what I might decide to store, how i'll format stored data, how the whole styles + pages thing will interact, etc. etc.) please tell me those suggestions.

    This is obviously a large project, and I'm not asking for anybody to actually do the whole thing for me, but I figured I'd get some opinions before I dive in and start coding. When I come up with a design, maybe I'll post it here so you guys can see what I finally came up with, if there's interest.

    Thanks,

    Dan


    (note: I posted this on the Java forum as well, because I am considering programmming it in either PHP or Java... I'm definitely leaning more toward PHP though, just because I know it better)

    ... what's the world coming to?

  2. #2
    SitePoint Enthusiast aivarannamaa's Avatar
    Join Date
    Sep 2002
    Location
    Estonia
    Posts
    36
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    It seems to be very interesting project and you have done a good analysis already.

    Some thoughts from me:

    * I understood it like you plan to use filesystem for storing site content yet you want it to be easily updatable. (I assume teachers are going to update their sites from a web interface instead of editing html files). I would recommend using a database for content. Although files may seem easier at first I'm afraid there will be more hassle when you want to add features to your system later. With database it would be much easier to present different views to the same data.

    I'm not good at xml, so I can't recommend it either .

    If you choosed database then you would probably need some of tables like 'teachers', 'students', 'courses', 'course_times', 'student_grades', 'teacher_courses', 'student_courses', 'course_classes', 'tests', 'homework_assignements' ... or something like this.

    * It would be nice to have content-editing pages very similar to content-viewing pages. I once solved a similar problem like this: If a general user sees a page then only content is shown; if logged-in page owner sees a page, then somewhere in the page appears a small link, clicking this would show the same page again but now editable pieces of content are form elements (edit-boxes/textareas), after changing the content and submitting the page shows again static text.

    * When page is in edit mode, then there could be a combobox with possible styles to apply for that page. I would implement styles collection with a folder full of css files, this combobox would be then filled with filenames from that folder.

    I wish you luck for doing this thing.
    I would also be interested in the solution you choose finally.

    Aivar

  3. #3
    SitePoint Addict
    Join Date
    Nov 2000
    Location
    London, UK
    Posts
    223
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks for your response,


    I was thinking about it some more, and realized that I didn't want to have to do any backend work (e.g. adding a new database table) in order to be able to add a new type of page.

    For example: If I want to add a new type of page and call it "2 Columns Text with Pic in Middle", I don't feel like making a brand new database table, and a new form for it. I wanna just be able to add a file to some directory, and then the program will automatically add it to the list of available pages, generate a form for it, and know what it needs to look like after you've filled the form out.

    Basically once I've written the thing I want a monkey to be able to add new styles and new templates. The only thing a programmer would have to do would be to add dynamic templates, and even then I don't want them to touch the database that the program uses, or to need to change any code. They might have to make a specialized form, which they'd stick into a certain folder, and add a few classes, which they'd stick somewhere else, and finally a single file that did all the stuff, which they'd stick in with all the other templates.

    That's my (probably unachievable) goal, if I ever think of a way to do it, I'll post it up here.

    Thanks,
    Dan

  4. #4
    SitePoint Guru
    Join Date
    Aug 2001
    Location
    Amsterdam
    Posts
    788
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Hmmm

    It really sounds like an existing program that is called blackboard.. let me see if I can find some info for it..

    http://www.blackboard.com/

    this is not a cheap program (very expensive even :-( )

    But their site might give you some functional idea's and insight..

    Greets,

    Peanuts
    the neigbours (free) WIFI makes it just a little more fun

  5. #5
    SitePoint Enthusiast ken_11223's Avatar
    Join Date
    Mar 2002
    Location
    NY, USA
    Posts
    36
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Not really unachievable!

    FatPiper, you did really have analyized a lot before starting out coding. that's a good start!

    I do have some comments and sugession for your project.

    As my college also using a blackboard in which peanuts mentioned before, i think this blackboard will give you a lot of inspirations of how the system will work and look like. Some snapshots of blackboard include that teachers / students will have different logins so that students can check grades and learn course while teachers can post announcment and check grades of all students and will be able to download their course' documentations like class movies, sample test questions posted by their teachers...etc.

    To start out the whole system, it is better to
    -> set up a teacher/admin/students database first.

    -> Code the teacher login part, let them login and then edit the course title or page outlook (by some comox boxes or textfields) or upload the necessary class movie or course document to the directory according to their name (check if it exists before, if not, create one). Any updated above should store in the database, like the path of the document (not the physical files!). If they do have html files header or footer want to upload, store the path of that in the database as well.

    -> Code the students' login part, which seems to be the simplest one. ^_^. Just look up the student and course by teacher table, something like that, as well as the page outlook by that course/teacher stored in the database. Easy! nothing special.

    -> Though XML can do a great job of dealing with a tree like structure, SQL database will do it fine(at least for me, i don't really know xml a lot ^_^). For examples, the tree structure : school / teacher / course / docment can be solved by setup a match-up table like: school_id, teacher_id, course_id and document_id and have a query like this:
    "select * from XXX where school_id=X and teacher_id=X and course_id=X and document_id=X.

    To conclude, it seems that it is too scary to start out such a big project. But i think it is impossible to figure out everything before we touch the keybload to program. Just having like 60 -70% of what we have it in mind will be a good start and the remaining will be normaily unveiled through the process of program and test

    hope my suggestion can help you out a little big. thanks for you guys attendion
    Last edited by ken_11223; Dec 23, 2002 at 11:42.

  6. #6
    SitePoint Addict
    Join Date
    Nov 2000
    Location
    London, UK
    Posts
    223
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    This Blackboard thing sounds really interesting ... could either of you guys post a link to a site that was made exclusively with blackboard so I can see the end result?
    And perhaps (if either of you have access to it) what the admin interface looks like? (just a snapshot...) It's kinda hard for me to visualize what a Blackboard looks like, blackboard.com doens't have any demos that I could find either.

    I've thought more about my proggy, and it's amazing how many different outlooks there are to this thing. My original idea (before I started this thread) went something like this:

    I've got these DB tables or XML Files (still not decided): data, pages, courses, teachers, students

    I create objects for various types of data (like image, movie, variable, long text, color, font, etc.), each one being named like dtImage or dtMovie ... They all know what they look like, and how to output themselves into HTML, as well as how to save themselves into data (write to a database). They could also output themselves as a form to be filled in, and they would know how to load the submitted form data from the filled-in form.

    I then create a page object. The page object loads up a description of what it should be from some file somewhere. For example: if it's to be a Picture with Caption page, it'd load up PicWithCaption.xml, which would say that it needed a dtImage piece of data that will be called "pic1", and a dtLongText called "caption". It would also point to an HTML file which the page object would load up. The HTMl file would have things like {pic1} or {caption}, where the pageObject would put in the value of dtImage.renderHTML, or something like this. It would then have its own renderHTML method, which would return the filled-in HTML. It could also display a complete form, with all of the dtImage, dtText, etc. forms displayed on it, and it would know how to load them all.

    Then there would be course objects. courseObject would contain an array of page objects, and would manage a navbar between all of these objects. It would be responsible for making a folder to put the HTML files in, and then writing all of the pageObjects to their respective HTML files, and linking them all.

    Finally the teacher object, which would contain many course objects, and maintain the linking of all of them, as well as teacher info such as name, email, username and password, etc.

    Each of the various objects would be responsible for writing its own data.

    In the MVC way of doing things: those objects are the model

    It then have a separate-ish sort of thing that uses this whole structure to implement a wizard where teachers can very easily (press 'next' to continue ... this type of thing) update the pages, and the courses.

    The beauty of this whole system is that (as I specified in first post) it makes it VERY easy for somebody to add a new type of page, or a new design. For example:
    PHP Code:
    picture_with_caption.xml:
    <
    pagedef name="picture_with_caption" htmlfile="/blah/picture_with_caption.html">
      <
    dt type="image" name="pic1" title="Picture" description="Picture at top of page" />
      <
    dt type="longtext" name="caption" title="The Caption" description="Caption to go underneath picture" />
    </
    pagedef>

    picture_with_caption.html:
    <
    html>
    <
    body>
    {
    pic1}
    <
    p>{caption}</p>
    </
    body>
    </
    html
    This way, just by adding the .xml file's name to a list, I can add a whole new page.

    I am using the .xml version as an example, I might also use a DB or some other method. However, I don't think I am allowed to use a DB for this program, because for some reason they don't want a DB server...

    (Sorry for long post, I'll break it up into two parts)
    Last edited by FatPiper; Dec 25, 2002 at 10:02.

    ... what's the world coming to?

  7. #7
    SitePoint Addict
    Join Date
    Nov 2000
    Location
    London, UK
    Posts
    223
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I think now I'm going to drop the idea of having multiple styles or designs. I don't know why, but it seems that all the teachers might as well use the same one. And it certainly doesn't need to be changeable per-page ...

    The other thing is that I think that the adding of new types won't be quite as essential as I originally thought. Once I've got the main ones in there, we won't really need too many more. So I think I'll make two separate apps and then just link them...

    App 1: Online webeditor.
    Single PHP file which lets you create a webpage. You can add whatever you want to this webpage, and continue adding bits and pieces to it until you're all done. It then can either give you a long string of data which it can load back in later, or it gives you an HTML file.

    App 2: The File Browser
    Online file uploader/downloader where teachers can just stick stuff, and make folders etc. When non-teachers view it, it can check file permissions, and give the files or not based on the user's authentication. When displaying the teacher's area to a user, it will show the folders and files the same way the teacher made them.

    Link between the two:
    The File browser will allow you to create a webpage instead of uploading a file, and give it a filename. The Webpage maker will allow you to make links to any of the files in the File Browser's database.

    I think that this system will be much simpler and faster to make. Tell me what you think: the 1st one, or the 2nd one.

    ... what's the world coming to?


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •