Pre-Selection Question

Hello, hope all is well.
I am currently test-driving a few different social network solutions. I am having trouble solving some unique issues i have. I will explain the concept using an example.

Lets say i wanted to build a community site focused around recipe's. The concept would require these unique features.

1. The ability to have a separate news feed or group for different categories of food. (News feeds for indian food, chinese food, italian food, etc.)

2. The ability to have the recipes (Posted by users) organized by number of likes. (For example: Post A has 2 likes, Post B has 4 likes. Post B moves aboves Post A due to number of likes)

3. The ability to have a global news feed that shows the top recipes from every category. (Post A in Indian Food has 6 likes. Post B in chinese food has 5 likes. Post A shows above Post B in the global news feed.)

I understand i may be asking alot here, but if you can point me to a module or plugin that would accomplish such a site... That would be highly appreciated and would certainly earn a subscription. If you can point me to a custom developer or somebody who can accomplish such a plugin/module, that will be considered aswell.

  • You can just use the bundled Blog plugin and change the language use to fit your needs - you could use Translation Editor for that.

    You can classify blogs using tags or categories: either Tag Tools or hypeCategories can help. 

    You can implement custom tag/category filters for the activity feed.

    You can list recipes by likes using elgg_get_entities_from_annotation_calculation().

  • As Ismayil said there are a few plugins available to allow for categorize content. The question is any of these are sufficient for you. Another possibility would be to create a group for each category of recipes. These groups could not only be used to bundle the recipes to a certain extend but it could also be additional content added within these groups (e.g. background info about the region/country, typical ingredients, general info about specific styles of cooking etc.).

    As Ismayil also already said, the Blog plugin could be used for posting the recipes. The simpliest form of customization would be to modify the branding / wording of the Blog plugin (by changing the language strings in the language files) to display "Recipe" instead of "Blog" etc.

    The next level of customization could be cloning the Blog plugin. In addition of just modifying the language output you would have to rename also function names, action names and everything else in the code that would prevent usage of the unmodified Blog plugin and your "Recipes" plugin in parallel. The advantage of cloning the Blog plugin would be that you could still use the Blog plugin for posting non-recipe related stuff and you would also be able to make other modifications that you might want only for dealing with recipes. The cloning of the plugin is not that difficult. Basically, you would only go through every line of all files of the Blog plugin and change any occurance of "blog" for example to "recipe".

    Some more sophisticated features might also be cool to have in a Recipes plugin. Cloning of the Blog plugin could still be the starting point but some of these features might not be that easy to implement and you might be in need of a developer for them. I could image that it might be nice to have two separate text fields for entering the list of ingredients and the instructions. Or even better you might want to offer more specific input fields for the ingredients like ingredient name, quantity and unit (e.g. "flour", "200", "g") and for how many potions the given amounts are intended. This would allow for offering some nice features converting the units for different regions of the world (e.g. US units or SI units) and to calculate the amounts of ingredients necessary for different number of persons. And the users could request the recipe with number of meals and units adjusted as email notification.

    To list the recipes by likes I would suggest to add an "Top recipes" tab in addition to the existing "All", "Mine" and "Friends" tabs. With using elgg_get_entities_from_annotation_calculation() it's not too difficult to list the recipes by likes on this additional tab. The reason why I suggest an additional tab is that I think it's better to keep the default order (newest first) on the other tabs. Otherwise it might frustrate a lot of users if they add a new recipe and it does not show up at the top but somewhere down the lists (new recipes would start with 0 likes). Instead of likes you could also use the Elggx Fivestar plugin to allow for a more detailed ranking (e.g. "1 to 5 stars" instead of only "like or not"). It's also possible to list content based on their average ranking gained with the Fivestar plugin (for example used in the Tidypics plugin to list photos in order of their ranking).

    The global list of recipes would also be available without any additional coding. For example the Blogs page does also show blog entries made in groups as long as the access level of these entries are not group specific and the group is an open group.

  • Than you for your quick and thorough response! So far ELGG sounds like the best content management system for my intended goals.

    There was one question i forgot to mention. Are you aware of any plugins that would allow the votes to refresh. Either on a selected blog or 'recipe' or the entire site? Either done manually or preferrably, every 24 hours.

    Sorry, i am not trying to be a pest. But i have spent countless hours trying various CMS solutions only to reach an expensive or tedious roadblock. for there fantastic responses.

    Thanks very much to iionly and Ismayil Khayredinov  for there fantastic responses.

  • I don't think there is already a ready-to-use plugin that would reset the votes/likes exactly in the way you want them to.

    But I don't think it should be too difficult to create such a plugin. Elgg has build in cron handlers ( that can be used to execute functions at specific intervals (e.g. once per hour or once per day etc.). Within such a function any vote older than say a day could be deleted.

    There's a kind of general purpuse plugin that allows to set an expiration (deletion) date for entities already on time of creation (Expirationdate plugin at The plugin provides just the groundworks though (a plugin that wants to make use of the expiration process must hook into the plugin hooks of the Expirationdate plugin to add the expiration data). Unfortunately, the plugin does also only allow to be used for deletion of entities (a data object of Elgg used for example for a blog entry) whereas the likes (or Fivestar votings) are saved as annotations (another type of data object that is not standalone but belongs to an entity). Nevertheless, the automatic cleanup of votes would not be much different to be implemented than it's handled in the Expirationdate plugin.

  • Thank you very much for being so helpful. After inquiring into various CMS options, it came down to social engine or Elgg. Social engine require alot of custom coding if i want to achieve many of my goals. Elgg seems to be a friendlier option and i feel more confident editing the code using my basic PHP knowledge.