PHP/MySQL Content Management System.
Technology Used :
- Google Oauth API
- Google Custom Search Engine (CSE) API
Big Sample Sites Using This Code :
Provides language lessons and quizzing for English speakers wishing to learn one of 12 available languages. This uses Chrome-only's voiceSynthesizer to accurately reproduce accent and pronunciation, whether you are studying French or Korean. Also, Gooogle CSE (Custom Search Engine) is used here, using the image search to generate the images used to identify words in the lessons and quizzes.
This site is handling 100,000 different URL queries (i.e., site.com/word/), which then serves up results from a dictionary that was parsed into a MySQL DB.
This site provides a basic way to upload and sort content that may then be liked, commented on, tagged, reposted on 40 different social media networks, downloaded in 18 different formats, listened to using a built-in audio player, and properly crawled by websites using the specifications for sitemap xml files and robots txt files.
Small Sample Sites Using This Code :
- SortWords.com: Sorting Your Lists of Words For You
- ListKeywords.com: Finding and Listing Your Keywords For You
- RemoveBlankLines.com: Removing Blank Lines from Lists
- RemoveDuplicateLines.com: Removing Duplicate Entries from Lists
- RemoveSpacing.com: Removing Spaces and Spacing from Your Text
Note: All of the big and small sample sites are running on the exact same codebase.
Technology Implemented :
- All Formats Available : Mobile, PDF, Printer-Friendly, Text, RTF, EPub, DAISY, SGML, JSON, XML, CSV, Latex, OPDS, RDF, and others. User merely needs to change their given URL's file-extension to get the alternate version.
- Audioplayer for text using Google Chrome's Voice Synthesizer.
- User tagging, liking, commenting system, where users may authenticate through the site's own login.php, or through their gmail account.
- Document Generation Caching with Auto-Invalidation as soon as the content changes.
- MySQL FullText indexing and searching.
- SiteMap XML Spec and SiteMap-to-Crawler Curl-Pinging for 500 Search Engines.
- Native, Light-Weight Stats-Tracker.
- Lexical Parsers Capable of Generating Keywords, Definitions, or Facts from Text.
- Autogenerated Share Links for 40 Different Social Media Sites.
- All Base Conversions and Customizable Base Alphabets (Hex, Base64, etc.).
- Internal Server Error Logging and Handling System.
- Number Theory, RSA decrypter/encrypter, and Associated, Cryptology Functions (these functions are not used in security of the code, they are for cryptological research purposes)
- Robots.Txt Autogeneration in TXT, XML, and HTML formats.
How Does it Work? :
- The .htaccess file in each domain redirects every URL to site.com/index.php.
- index.php includes standard files and initiates the Handler with HandleRequest()
- The Handler puts together the basic information, like what filetype is being request, and redirects user as necessary to one of the script/*/ files, inheriting one filetype parent at script/types/*/, probably using several trait/script/*/ files, and ultimately it displays the actual template at tempaltes/site.com/scriptname/scriptaction.php.
Why Should I Use This? :
- The Handler
The handler looks at each of the pieces in the query and selects the Entry records (representing the actual page) and the Assignment record (representing the connections between the various parent and child pages).
This query selects the Entries and the Assignments based on "chinese" (a page about learning chinese), "nouns-animals-part-14" (lesson 14 about animals), and "cat" (a single word which is covered in this lesson).
Above is the list of entries and their common connections. Each page is the same exact record types: an Entry to represent the page, and an Assignment to represent its connection to a parent page.
With all of the techno babble covered, what we get above is a magnificient looking site. So what's the advantage of setting up the DB like this?
Because there are no DB changes required for any new types of pages! We have a page about teaching chinese, a subpage that's a lesson, and a subpage that's a word in that lesson. They are all Entry records, so no DB changes are required to make work with the above child-record types.
And no code changes are required either for completely new parent or child types! Every page, whether it is the highest level (website.com) or the lowest level in this demo (website.com/a/b/c/), all of them use the same exact view.php, login.php, browse.php, etc., scripts!
Need to customize the display for specific record types? Easy! The above file is located at: templates/earthfluent/view/display_greatgrandchildof_EarthFluent.php. This is the file that displays for the "third" level children of the main website.com, so it'll show up for every website.com/a/b/c/view.php?action=display page, no matter what a, b, or c are. Notice that functionality here for child records updates dynamically based on whether the given a, b, or c actually uses those child records.
All of the Entry records associated with a URL are the same exact type of record, so they can each be modified or updated using the same exact script. Why would the script need to be different? If each letter in a/b/c/d/view.php is an Entry, why would they need different scripts to modify the data? This simplifies improvements and additions, making it so that a new feature for one type of page can be come a new feature for every type of page.
For all these reasons, virtually an infinite number of sites, with an infinite number of features, can be built, designed, scaled, and improved all within the same software environment. That is the advantage to using this software.
Green Gluon CMS is hereby released under the BSD-3-Clause License.
Software being used under the Green Gluon CMS, such as Google OAuth, Google CSE, FPDF, etc., may have its own terms and services outside of the above-given license. I make no claims on the terms-of-use of source code files appearing here that I did not write.