Posts Tagged “drupal”
I’m trying out a navigation solution to my featuritis dilemma. As I’ve got 3 major features on my site - [1] a community blog, [2] aggregated news feeds, and [3] an aggregation of forums postings from selected forums in an associated Moodle course support platform (I’ll describe this, and the reasons for it, in a subsequent post) - each with multiple views - the comprehensive navigation for all 3 features together was growing cumbersome, with a rather lengthy side column of menu blocks.
So - I’ve created a front welcome page using a “Page” node, with a menu block linking to each of these 3 sections of the site; and added links as well to my 3 sections in the “primary” menu, which displays below the header on all page views.
The side-column menu blocks relating to the Community Blog should show up on the various views of the Community Blog “section” of the site, but should not show up on the views relating to Aggregated News or the Aggregated Forums, & v/v. To accomplish this, I’ve set up custom block visibility for these views.
On the Blocks Administration page, to manage block visibility, click on the selected block’s configure link. At Show block on specific pages:, select Show if the following PHP code returns TRUE (PHP-mode, experts only). Paste in the equivalent of:
<?php
$match = FALSE;
$types = array(’blog‘ => 1);
if (arg(0) == ‘node’ && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array(’nid’ => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
$url = request_uri();
if (strpos($url, “blog/“)) {
$match = TRUE;
}
if (strpos($url, “tagadelic/list/1“)) {
$match = TRUE;
}
return $match;
?>
The first criterion - $types = array(’blog‘ => 1); - will include this block on all single-node pages where the node is a blog entry.
The second criterion - if (strpos($url, “blog/“)) { - will include this block on all pages where the URL contains the string blog/. I’ve set up the various Views of the community blog, in their Views settings, to have the url blog/… (e.g., blog/communityblog_listview, &c.).
The third criterion - if (strpos($url, “tagadelic/list/1“)) { - will include this block on the tagadelic tag-cloud page that lists my blog-specific taxonomy (but will not include it on the tagadelic pages displaying taxonomy specific to news aggregation &c.)
This was repeated for each of the side blocks that I want to see displayed on the Community Blog related pages of my site; these will now show up when the user is navigating through pages related to the Community Blog, but will not show up if the user is in other “sections” of the site.
Side-column menu blocks for the other sections of the site are similarly configured, to display menu items specific to the News section only on the pages dealing with aggregated news, &c.
I like it - it works ;^)
No Comments »
In the continued development & refinement of my social learning platform, I find myself facing a featuritis dilemma, as elegantly described by Kathy Sierra (illustration from her most wonderful blog):

How to resolve? Navigation? Simplification? A collection of simple sites each of focal purpose, linked with one another, v/s one “swiss army” site? Do I/we need all this?
Aggregators were apparently developed to help shift the web-phenomenon east of “happy user peak” to the left; yet my aggregation site seems to be beginning to slip down the slope past “guess I better look at the manual …”.
I’m wondering about using Drupal’s multisite function, with the multisite_login module, to create parallel sites for separable functions of my currently swiss-army-ish tool - with shared user db’s and single login. Community blog with aggregation of users’ distributed content on one site, community rated aggregated news on another, aggregation of selected Moodle course forum discussions on a 3rd.
Or perhaps I’m just getting too excited about the tools, & need to simplify overall. The tools are just too cool.
No Comments »
Without a few tweaks, posts will be identified as authored by “xena123″ or similar usernames. To make this a truly social experience, I’ll need to have real names resolve as authors; and to add a carbon-based element to the user experience, I’ll need user pictures to accompany posts.
Online conversations can be of very high quality, and can be quite human in character - my little Rosie (the Bernese retriever / golden mountain dog puppy in so many of my postings) came to me through an online friend, as a case example. But I am convinced that there is unique character to face-to-face conversations in the hall or library or the coffee shop across the street, and I’d like to see this platform act as a nidus around which such conversations can form. For this, we need to be able to hang our conversations around names and faces.
For this, we’ll need to configure drupal’s built-in user-picture support; enable and configure the core Profile module to provide a real name field; and install, make a minor hack on, and configure the 3rd-party Authorship module to substitute users’ full names for usernames in posts.
For pictures -
In Admin > user settings, check the Picture support - Enabled radio button.
The picture image path field needs to be designated (e.g., pictures)
In Admin > Themes, click on the “configure” tab; check the Display post information checkboxes for Blog entry and Feed item
Users can upload pictures at “My account”/edit
At Admin > user settings, you can post user picture guidelines - explaining that for the purposes of this site, these need to be real, recognizable photos; and not photos of the user’s dog, “avatars” of Xena Warrior Princess, &c.
I’ve found it handy to bring a digital camera to the first week of classes, and delegate to a student the task of getting pics of their classmates; these can be distributed for users to upload, or as admin, you can spend an evening getting pics up for a more cyber-confidence-impaired user population.
At Admin > Profiles, create a single-line textfield profile_fullname in category personal information. Check the public field - shown on profile page & on member list pages radio button, and the checkboxes for visible in user registration form and user must enter a value.
The Authorship module needs a small hack; as is, it will substitute the user’s fullname for the username in teaser view and in single-node page views, but not in views with multiple full-nodes on a page. To fix this:
open authorship.module, and edit line 157, to read
if( $page || $teaser || $node) {
At Admin > Content type > Blog entry, find Enable authorship module functionality and check the enabled radio button. In the The profile variable name used to store the real name: field, enter profile_fullname. Do the same at Admin > Content type > Feed item.
Done. Now posts - both Blog entries and aggregated distributed user content - will now be identified by the user’s full name, and will be accompanied by the user’s photo.
No Comments »
Have also been playing with drigg, a ‘Digg clone’ written as a Drupal (5.x) module suite. Works very much like Pligg, reviewed in my last post. Voting is done using the drupal votingapi, with extra_voting_forms as the interface. In addition to accepting individual submissions, like Pligg, drigg will import rss feeds, and has a very nice feed import interface. The rss import function depends on the default drupal ‘Aggregator’ module, with the addition of some custom code in the drigg module itself. A provided theme gives a Drigg/Pligg-like look & feel.
I had no trouble setting up an installation & getting feeds to import.
My sense is, after playing a bit with both drigg and Pligg, that if a dedicated Digg-like “social-ratings-of-submissions & feed items” site is desired, without the need for added functionality, I’d go with Pligg; if there is reason to integrate this with other functionality that could be provided by other drupal modules, drigg will perform the same tasks quite nearly as well within a drupal installation. The module suite is under active development, and has come into its present state quite quickly, so I’d keep an eye on it.
Currently, I have a site set up as a dedicated drigg installation; I’ll be messing around with integrating this into one portion of a more comprehensive drupal installation, to see how well it might integrate with other drupal functionality. Drigg’s feed import functionality depends on the default drupal ‘aggregator’ module, which does not play well with the very elegant ‘aggregation’ module I’m using on my social learning platform for aggregation of users’ distributed content; so this strange need I feel to aggregate two different types of content separately on my site may leave me in a pickle (perhaps I need to use Drupal’s multisite and multisite_login capability, & create 2 sites with single sign-in, each using the Aggregation module to its own ends, one to handle aggregation of news and 3rd-party submissions with social ratings, and one to handle users’ distributed content with comment-density surfacing of content? - perhaps I’m just nuts).
For drigg in action, see here:
http://www.drigg.org/
or here:
http://www.fsdaily.com/
No Comments »
I’ve been evolving the news feeds portion of the site, and am quite happy with how it’s working out. Here’s the current configuration:
News feeds are imported using the feedapi module; as Feadapi nodes (rather than using the “lightweight items” option). I’ve restricted news feed creation to admin, to avoid feed bloat; users can suggest additional feeds that might be of interest. I’m importing several feeds of interest to our community.
Feedapi is set to generate Story nodes from individual news items. The feedapi module took a little messing around to get familiar with, but is working well for me now; tho if I weren’t using the Aggregation module for a different function on the site, I’d use it here, instead of feedapi; in which case substitute “Feed item” nodes for “Story” nodes below.
For voting, the Voting_api module is installed, and voting is done thru Extra_voting_forms. Extra_voting_forms is enabled for Story nodes, with the “karma” form displayed in the links section for nodes, as “up only”; one vote is allowed per user (the remainder of the settings remain at default).
The Community_tags module is installed, and is enabled for a vocabulary I’ve titled “news_tags”. In Administer > Content types > Story, Community_tags is enabled inline (safest thing for other node types is to enable it for “block”, so that it’s out of the way on other node types).
Using the Views module, I’ve set up several Views for the generated news-item Story nodes:
“raw news items” filters all published Story nodes, and sorts these in descending order of creation (I’m using a table view here);
“promoted news items” filters all published Story nodes having rec’d at least 3 votes (VotingAPI points vote result (sum) ≥ 3), sorting these in descending order of VotingAPI points vote result (sum).
using the Tagadelic module, I have a news_tags tag cloud, at url …/tagadelic/list/9 where 9 = the vocabulary id#
the coolest display tho, is set up using the Node_cloud module. A page is created in Views, with node_cloud as the page type; with Node creation date as first sort order, and VotingAPI points vote result (sum) as second sort order (both descending). I’ve added two exposed filters - VotingAPI points vote result (sum), and Comment count; both set Optional, at ≥, with operator locked. The default display includes all news items, sorted in descending order of creation date, with font size reflecting the number of votes received. The user can elect to filter the display to include only those news items receiving ≥ x votes, and/or ≥ x comments. I’ve set up an Argument RSS: RSS Feed Selector set at “display all values”, to create an rss feed icon for the page - this feed will include the content as filtered on the page (i.e., it will reflect the user’s use of the exposed filters, so the user might subscribe e.g. to all news items receiving at least 3 votes and at least 1 comment).
Here’s a pic of the resulting page:

_____________________________________
No Comments »
I’ve just been playing around with an elaboration of using commenting information as an algorithm for surfacing community blog posts (see #15 in this series) - and came across what looks like an elegant interface for this.
I’ve installed the Node Cloud module; cloned my Community Blog view (make sure that the Fields section is blank - this is required for Table or List view, but will interfere with a Node Cloud view; filters should be cloned from the Community Blog view); selected Node Cloud as the view type; and set for sort order #1 Comment: Last Comment Date (descending), and sort order #2 Comment: Comment Count (descending).
Blog posts (and imported distributed content) which have been most recently commented on will now float to the top of this cloud page (these will be listed by post title in the cloud); and font size will reflect the # of comments/replies made to a post. My rather visual mind wraps around this display nicely.
Check it out, in my sandbox site at http://sandbox.similibus.org (set up a user account and play around on the site).
No Comments »
I’ve been thinking a lot about effective strategies for surfacing material of particular interest to the learning community, in an active community blog.
For small communities - and ours, at 500+ students, is likely on the cusp re this - a river of news format, with author tagging and tag cloud display, may well suffice without the need for other surfacing methods. For larger communities, it may become essential to provide a method to surface material of particular interest to the community at large.
As I’ve noted earlier, I’m a bit reluctant - in part on the advice of some test users - to introduce social rating of peer-contributed content in this context (of a community blog for a small, closed learning community). I certainly can see some potentially positive aspects of peer ratings of contributed content - inspiration to make contributions constructive to the group’s collaborative learning, with positive reinforcement for doing so; along with the learning opportunities implicit in offering and in receiving peer review.
But I am concerned about some possibilities - that this could become a popularity contest either in fact or in perception; that ratings might have more to do with agreement with a student orthodoxy than with a post’s contribution to community learning; that poor peer ratings might serve to disenfranchise some students rather than to inspire continued effort. Although offering and receiving peer review may be a valuable learning opportunity and may contribute to maturation of both parties, these lessons likely require more interaction than can be effectively communicated thru an up/down vote.
In less personal settings - e.g. surfacing of aggregated 3rd-party news items, or in more disseminated communities such as those driving Digg - social ratings seem to be the ticket. Am wondering tho if other algorithms for surfacing of content might be better suited to a community discussion.
Gardner Campbell wrote a recent post in his blog, titled Mistakes as Portals. Got me thinking about this question specifically - is the voted-up post necessarily a more interesting learning opportunity than the voted-down post? I’m recalling a forum discussion from a class last fall; unable to find anyone to cover my class, I was forced to teach 2 weeks of a course at a distance, while teaching in Europe. I assigned readings, and set up forums on our class Moodle page for discussion, weighing in on my end from cybercafes while traveling. One student posted a comment that struck others - and me - as rather offensive. By the time I read it, given the timezone difference, there were already several reactive comments posted. I nudged gently with a reply, and watched the conversation shift to a productive learning opportunity that permitted the original poster some recovery of dignity, and incorporated some of her original thoughts into an understanding that transcended the original disagreements. My sense is, that in a Digg-like format, her initial posting would have been buried as unpopular, offensive and unaligned with student orthodoxy; she would likely have remained disenfranchised and we would have been denied a productive discussion.
So perhaps an alternative criterion on which to rate user posts, would be how much does it inspire community discussion? With this in mind, using the Drupal Views module, I set up a “most commented” page - filtering for posts which have received at least 3 comments, and listing these by descending order of # of comments received. Posts receiving active discussion will surface toward the top of this page. Promotion is based not on peer-review as such, but rather on quite objectively, how much did this post engage the community in discussion?
Here are the essential settings on the Views settings for this page, set up in “table view” format:
Fields:


No Comments »
[ok, I did skip #13 - but hey, I just recently suffered site outage, and (fortunately temporary!) loss of a domain name, when my (former) hosting company went belly-up one Saturday morning without notice - so perhaps I can be forgiven a little superstitious behavior!]
In addition to the user-contributed material on my site (blog posts in the community blog & in satellite groups; attachments to blog posts displayable in a mini-portfolio; and aggregated distributed content from user blogging on other platforms), I wanted to provide some focused 3rd party feeds - health news from the BBC and NPR, Terry Gross’s wonderful Fresh Air interviews, feeds from the Centers for Disease Control, &c. I’ve been providing these on the front page of our Moodle platform using Moodle’s rss aggregation module as a sideblock, but thought it might be interesting to add some features to these imported feeds - such as threaded discussion on selected news items, and social rating of news stories with ranking/surfacing of voted-up content.
I’ve played around with ways of doing this. Recently I’ve been playing around with Tony Mobily’s most excellent Drigg module for Drupal, & may have more to say about that later on a bit, after more of a trial. My present implementation tho, is muckled together from other Drupal plugins.
As the Aggregation module is employed for other purposes on the site, I added a 2nd feed aggregating module. After trying out several options, I ended up using the feedapi module. This does not have the full set of features available in the Aggregation module, but it is serving reasonably well for this purpose. With a little care in naming of node-types, these two aggregators seem to play well together. The feedapi module is configured to create Story nodes from the feed items, and these Story nodes are organized for display in various formats using the Views menu.
For social ranking of news items, I have the votingapi module installed, and the voting interface is configured using extra_voting_forms (I’ve also tried fivestar, which works nicely as well; it just comes down to a preference re user interface). This is set up to permit voting up/down of Story nodes containing news item content. Comments are enabled for the Story node.
I’ve also enabled the community tags module for Story nodes, to permit users to tag stories with terms relevant to our user community.
In addition to the pages displaying the raw news items, I’ve set up a page for “promoted” stories, with a views filter set for VotingAPI points vote result (sum) greater than or equal to a chosen value (in the sandbox site, I’ve set this at ≥2; in a site with more active members it could be set higher).
Users can now easily access relevant 3rd-party material (news feeds, feeds from 3rd-party blogs of interest, &c.); scan for relevant news items & read these; rate them according to interest/relevance to our learner community; and engage in discussion on the items. A table-view of feed items is header-sortable by user-ranking, number of comments, &c. & Items voted up in interest appear on the “promoted stories” page.
I currently have restricted the creation of new feeds to administrator; eventually I plan to open this to faculty, and it might be interesting to open it to the community at large.
1 Comment »
I’m quite intrigued with the distributed discussion on the near-mythical ‘eduglu,’ and the work that some folks - notably D’Arcy Norman - are doing to create an ‘eduglu’ platform.
The notion here, as I understand it, is to create a platform capable of aggregating users’ distributed content from all manner of online publishing platforms, displaying this in a central location, and developing algorithms (e.g. social rating ala Digg) to surface material of particular relevance to the goals of the learner community. Threaded commenting on this aggregated material then can weave this previously widely distributed content into a community dialog.
This is truly amazing stuff! e.g., I could maintain my own blog, such as this one, in WordPress, using the WP Feeds widget to create context-sensitive feeds; and publish one or more context-sensitive feeds - e.g., the ‘dogs’-tag feed - to the ‘eduglu’ platform to be shared within that community (see my sandbox site, my ‘dogs’ feed from this blog is imported there). The user is not constrained, and does not need to be ‘brought over,’ to the community platform; does not need to duplicate posts made to a broader or selected audience. Users can publish on their platform(s)-of-choice, and have all this brought together into the learning-community platform.
The issue I face in my institution, is that very few of our students, and even fewer of our faculty, publish any distributed content. We have an older demographic, and due to the nature of our studies, likely have a less cyber-active population than many other learning institutions might have.
I see this changing tho. Progressively over the past two years, there are more & more shiny white boxes showing up in the classroom (our demographic does seem to lean strongly toward macs, much to the consternation of our microsoft-oriented IT department, and to my delight as a mac-fanatic). Students have been enthusiastic about my screencast lecturettes and podcasts, provided for class preparation & review. More of our faculty have been adopting forums in our Moodle LMS for blended discussion in classes and clinics. I can particularly see a wave of possibility here, as this increasingly cyber-capable population moves out into the world as alumni, spread out geographically and in need of accessible continuing education and peer support.
The question of algorithms for ’surfacing’ of information in a platform such as this comes up. Likely in a small institution, such as ours, the combination of a ‘river of news’ with tags (& the wonderful Tagadelic tag-cloud plugin for Drupal) and with buddies links and organic groups for niche discussions, would suffice. As noted in a previous post (#10 in this series), social rating might be problematic, with the potential for individual disenfranchisement (I would love to hear folks’ experiences with peer rating in this context!). Perhaps some creative use of social tagging (such as provided by the Drupal Community Tags module) could extend the benefits of author tagging of content, and provide some of the benefits seen with social rating of content.
On the Social Learning Platform I’m developing (sandbox version at http://sandbox.similibus.org), I’m using the Aggregation module to bring distributed content into the Community Blog. Of the feed aggregation modules available for Drupal, this is the best of the lot for this purpose - it imports the original article’s tags into the Drupal taxonomy, includes enclosures and inline graphics, and creates Drupal nodes from feed items, permitting organization and display of these using the Views module (see #9 in this series, where I set up a ‘community blog’ view which includes imported feed items as nodes in the ‘river of news’ alongside blog posts created within the social learning platform).
1 Comment »
I wanted to include a place for users to upload/archive files (of all sorts), to serve as a simple ‘user portfolio’ section of the site. I played around a bunch with some of the file management modules for Drupal, and the site was getting more & more complicated; and I finally came around to the “keep it simple” mantra that I’m trying to use to dictate the rest of the site’s design.
Fortunately, the Views module came to my rescue again, here coupled in use with Drupal’s built-in taxonomy. I came back to the idea of providing users with a single entry type - blog posts (allowing attachments); and use Views and Taxonomy to provide ways of viewing and organizing blog-post attachments.
Below, are the Views settings for a “my public files” page:
filters:

____________________
I created an “exposed filter”, to permit the user to select their attached files by tag:

______________
and created a page layout in table form:

_______________________
This view collects all files that the user has submitted as attachments to blog posts, into a table on a single page; renders these sortable by name, upload date, tag; and searchable by tag.
The Views module will permit many different ways of viewing the collected files - e.g., views could be created for “my published files,” “my unpublished/private files,” “all users’ files,” “my buddies’ files,” &c.; and could include exposed filters to further parse display.
I’m quite happy with how all this worked out - it feels like a very organic solution from the users’ end. Rather than creating a dedicated file upload/archiving corner of the site, files are contributed through the blogging interface (as either public or private/unpublished blog posts); and are merely displayed and organized through this interface.
No Comments »
|