<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.soylentnews.org/index.php?action=history&amp;feed=atom&amp;title=SectionTopics</id>
	<title>SectionTopics - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.soylentnews.org/index.php?action=history&amp;feed=atom&amp;title=SectionTopics"/>
	<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;action=history"/>
	<updated>2026-05-11T09:00:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.4</generator>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=6241&amp;oldid=prev</id>
		<title>FunPika: added Category:Development using HotCat</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=6241&amp;oldid=prev"/>
		<updated>2014-03-15T15:37:17Z</updated>

		<summary type="html">&lt;p&gt;added &lt;a href=&quot;/wiki/Category:Development&quot; title=&quot;Category:Development&quot;&gt;Category:Development&lt;/a&gt; using &lt;a href=&quot;/wiki/Help:Gadget-HotCat&quot; title=&quot;Help:Gadget-HotCat&quot;&gt;HotCat&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:37, 15 March 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l577&quot;&gt;Line 577:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 577:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     and _render which needs to be run&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     and _render which needs to be run&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Development]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>FunPika</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=5308&amp;oldid=prev</id>
		<title>50.45.173.59 at 22:05, 28 February 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=5308&amp;oldid=prev"/>
		<updated>2014-02-28T22:05:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:05, 28 February 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[CssWork]] parent&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;NAME&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;NAME&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>50.45.173.59</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=5305&amp;oldid=prev</id>
		<title>50.45.173.59 at 21:56, 28 February 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=5305&amp;oldid=prev"/>
		<updated>2014-02-28T21:56:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:56, 28 February 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;NAME&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;NAME&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     sectiontopics - Information about the section-topics rewrite, June 2004&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     sectiontopics - Information about the section-topics rewrite, June 2004&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l574&quot;&gt;Line 574:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 574:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     and _render which needs to be run&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     and _render which needs to be run&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>50.45.173.59</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=5304&amp;oldid=prev</id>
		<title>50.45.173.59: Created page with &quot; NAME     sectiontopics - Information about the section-topics rewrite, June 2004  DESCRIPTION     In June 2004, the way Slash handles categorization of stories into     topic...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SectionTopics&amp;diff=5304&amp;oldid=prev"/>
		<updated>2014-02-28T21:55:07Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; NAME     sectiontopics - Information about the section-topics rewrite, June 2004  DESCRIPTION     In June 2004, the way Slash handles categorization of stories into     topic...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
NAME&lt;br /&gt;
    sectiontopics - Information about the section-topics rewrite, June 2004&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
    In June 2004, the way Slash handles categorization of stories into&lt;br /&gt;
    topics was changed. The confusing relationship between topics, sections,&lt;br /&gt;
    and subsections, which limited choices, was bolted on to the old system&lt;br /&gt;
    as our needs evolved.&lt;br /&gt;
&lt;br /&gt;
    The &amp;quot;section-topics&amp;quot; rewrite, as it's being called, took a look at those&lt;br /&gt;
    needs with the perspective of hindsight, and developed a new system&lt;br /&gt;
    which will be less confusing in the long run. It provides the&lt;br /&gt;
    flexibility that large sites' admins will need, while still retaining&lt;br /&gt;
    ease of use for smaller sites' admins.&lt;br /&gt;
&lt;br /&gt;
    This document attempts to explain the changes for Slash administrators,&lt;br /&gt;
    and it may be informative reading for Slash authors and editors too.&lt;br /&gt;
&lt;br /&gt;
CONCEPTS&lt;br /&gt;
    I'm not going to bother explaining exactly how the old system worked,&lt;br /&gt;
    because it's dead now. Suffice it to say that every story had one&lt;br /&gt;
    section and one or more topics, those being two distinct and disjoint&lt;br /&gt;
    categorizations. Subsections were invented to allow finer-grained&lt;br /&gt;
    control than what sections permitted, and there were ways to constrain&lt;br /&gt;
    certain topics to only being available in certain sections.&lt;br /&gt;
&lt;br /&gt;
    The &amp;quot;section&amp;quot; data type was always confused about whether it wanted to&lt;br /&gt;
    be a categorization and descriptor, or a visual display modifier. In&lt;br /&gt;
    other words, regarding an object that it was assigned to like a story,&lt;br /&gt;
    &amp;quot;section&amp;quot; implied facts about both its data and how it should be viewed.&lt;br /&gt;
    Being in the &amp;quot;Book Reviews&amp;quot; section on Slashdot, for example, implied&lt;br /&gt;
    that additional data like ISBN would be stored along with the rest of&lt;br /&gt;
    the story's data. Being in the &amp;quot;Developers&amp;quot; section meant that it would&lt;br /&gt;
    be grouped with other developer-related stories and that it would appear&lt;br /&gt;
    blue instead of green. If a story was a book review for developers,&lt;br /&gt;
    there was no way to put it in both places; having that blue color meant&lt;br /&gt;
    that no ISBN data could be stored.&lt;br /&gt;
&lt;br /&gt;
    So &amp;quot;section&amp;quot; has been split into two: &amp;quot;skin&amp;quot; and &amp;quot;nexus&amp;quot;. *Most* of the&lt;br /&gt;
    information that went with a section was used to describe appearances,&lt;br /&gt;
    and that went over to skin. So a skin now controls color (through the&lt;br /&gt;
    skin_colors table), it controls which templates are used (the final part&lt;br /&gt;
    of a template's three-part name is now skin, not section), and it&lt;br /&gt;
    controls with which other stories a story is grouped (on which index&lt;br /&gt;
    page). And the non-display aspects of sections -- mainly, the&lt;br /&gt;
    &amp;quot;section_extras&amp;quot; data which ensured that stories in Book Reviews stored&lt;br /&gt;
    a field for ISBN -- were sent over to nexuses.&lt;br /&gt;
&lt;br /&gt;
    Each skin has precisely one nexus; you can think of a skin as drawing&lt;br /&gt;
    its stories from its nexus. The clever part is that a nexus is just a&lt;br /&gt;
    special kind of topic (which we call a topic_nexus when we want to&lt;br /&gt;
    emphasize that it is both). So if a story has both the Developers&lt;br /&gt;
    topic_nexus, and the Book Reviews topic_nexus, then it will appear on&lt;br /&gt;
    both books.slashdot.org and developers.slashdot.org. And the additional&lt;br /&gt;
    data stored with the story will include the union of all the &amp;quot;extras&amp;quot;&lt;br /&gt;
    data -- not only ISBN and so on, but also any &amp;quot;extras&amp;quot; data that may be&lt;br /&gt;
    in the Developers nexus. There don't actually happen to be any extras&lt;br /&gt;
    for Developers on Slashdot, so maybe this isn't the best example, but if&lt;br /&gt;
    there were, a story that was categorized into both nexuses would include&lt;br /&gt;
    that data too.&lt;br /&gt;
&lt;br /&gt;
    Authors are no longer restricted from choosing any topic with any story.&lt;br /&gt;
    Since a nexus is a topic like any other, an author who wishes to make&lt;br /&gt;
    sure a story shows up in the Apple skin can pick the Apple nexus&lt;br /&gt;
    specifically. But what's more likely to happen is that an author will&lt;br /&gt;
    pick topics that make sense for the story (like &amp;quot;Mac OS X&amp;quot;) and that the&lt;br /&gt;
    weights assigned to those topics will propagate upwards into the correct&lt;br /&gt;
    nexus(es) where the story should appear.&lt;br /&gt;
&lt;br /&gt;
    Along the way, stories were given a numeric primary key (stoid), as were&lt;br /&gt;
    skins. Don't worry, a story's sid still works just as it did before; no&lt;br /&gt;
    Slash URLs are required to change, and in particular all the URLs (for&lt;br /&gt;
    search.pl and index.pl) that had &amp;quot;section=&amp;quot; as a parameter still do.&lt;br /&gt;
&lt;br /&gt;
WEIGHTS&lt;br /&gt;
    Each topic picked for a story now must have a weight assigned to it.&lt;br /&gt;
    Weights are floating-point non-negative numbers. The templates shipped&lt;br /&gt;
    with the stock theme assume that authors will be assigning only the&lt;br /&gt;
    weights 0, 10, 20, 30, 40, or 50, but the only weight value that the&lt;br /&gt;
    core code treats specially is 0 (which means &amp;quot;ignore this topic&amp;quot;). How&lt;br /&gt;
    positive weights affect the categorization of stories depends entirely&lt;br /&gt;
    on the topic_parents table.&lt;br /&gt;
&lt;br /&gt;
    Even in the old system, topics could be arranged into a tree -- but to&lt;br /&gt;
    properly represent section-specific topics one would have to layer&lt;br /&gt;
    additional data on top of the tree, confusing matters somewhat. Now,&lt;br /&gt;
    topics (including nexuses) really do form a tree, which is to say a&lt;br /&gt;
    directed graph. All topic-related data is loaded into a $slashd object&lt;br /&gt;
    at once, when getTopicTree is called.&lt;br /&gt;
&lt;br /&gt;
    One key difference between the old system and the new is that,&lt;br /&gt;
    previously, a topic had at most one parent. Now, a topic may have zero&lt;br /&gt;
    or more parents. This allows a topic of &amp;quot;Darwin&amp;quot; to be a child of both&lt;br /&gt;
    &amp;quot;Apple&amp;quot; and &amp;quot;BSD,&amp;quot; which conceptually means that it is a subcategory of&lt;br /&gt;
    both, and which practically means that assigning &amp;quot;Darwin&amp;quot; a weight will&lt;br /&gt;
    allow that weight to propagate up to both.&lt;br /&gt;
&lt;br /&gt;
RENDERING&lt;br /&gt;
    This process of weight-propagation occurs when chosen topics are&lt;br /&gt;
    rendered. Each parent-child relationship from one topic to another&lt;br /&gt;
    includes a minimum weight. For any given story, if topic T1 is assigned&lt;br /&gt;
    weight W, and topic T2 is the parent of T1 with min_weight M, then T2&lt;br /&gt;
    will also be assigned weight W for the story if, and only if, M &amp;lt;= W.&lt;br /&gt;
&lt;br /&gt;
    That assignment continues recursively (to topic T3, and so on) in a&lt;br /&gt;
    process called &amp;quot;rendering&amp;quot; -- performed by renderTopics(). A story&lt;br /&gt;
    author stores his or her topic/weight duples in the story_topics_chosen&lt;br /&gt;
    table, and at story save time, these choices are rendered into a&lt;br /&gt;
    (probably larger) collection of topic/weight duples that are stored in&lt;br /&gt;
    the story_topics_rendered table.&lt;br /&gt;
&lt;br /&gt;
    (The above rule describes most of what is involved in the rendering&lt;br /&gt;
    process. The other rules in the algorithm are that if multiple children&lt;br /&gt;
    of differing weights both propagate up to the same parent, the greater&lt;br /&gt;
    of those weights become the parent's; and that any topic's chosen&lt;br /&gt;
    weight, including a weight of 0, always overrides any weight propagating&lt;br /&gt;
    up from its children.)&lt;br /&gt;
&lt;br /&gt;
    Finally, when the collection of rendered topic/weight duples has been&lt;br /&gt;
    fully formed, all topics with weight 0 are dropped. Weight 0 can exist&lt;br /&gt;
    in chosen topics, but never in rendered topics.&lt;br /&gt;
&lt;br /&gt;
A SIMPLE EXAMPLE&lt;br /&gt;
    That may sound a bit complicated, so here's a description using the&lt;br /&gt;
    default topics and topic_parents included with the default &amp;quot;slashcode&amp;quot;&lt;br /&gt;
    theme:&lt;br /&gt;
&lt;br /&gt;
    tid 1: mainpage (also a nexus)&lt;br /&gt;
    tid 3: opensource (also a nexus)&lt;br /&gt;
    tid 4: slash&lt;br /&gt;
    tid 7: linux&lt;br /&gt;
&lt;br /&gt;
    Tid 4 has tid 3 as a parent, with that relationship having a min_weight&lt;br /&gt;
    of 10 associated with it.&lt;br /&gt;
&lt;br /&gt;
    Tid 7 also have tid 3 as a parent, with min_weight 10.&lt;br /&gt;
&lt;br /&gt;
    Tid 3 has tid 1 as a parent, with min_weight 30.&lt;br /&gt;
&lt;br /&gt;
    The skin at &amp;quot;http://example.com/&amp;quot; reads the nexus tid 1; the skin at&lt;br /&gt;
    &amp;quot;http://opensource.example.com/&amp;quot; reads the nexus tid 3.&lt;br /&gt;
&lt;br /&gt;
    Suppose an editor is working on a story about Slash and assigns it the&lt;br /&gt;
    topic &amp;quot;slash,&amp;quot; tid 4, with weight 10. Weight 10 is described as&lt;br /&gt;
    &amp;quot;Sectional only&amp;quot; in the code. When that story is saved, renderTopics&lt;br /&gt;
    recursively propagates the weight of its topics, or in this case its&lt;br /&gt;
    single topic, up to parents, or in this case parent. Rendering adds tid&lt;br /&gt;
    3, also at weight 10. It does not add tid 1 since !(10 &amp;gt;= 30). The story&lt;br /&gt;
    thus will appear only on &amp;quot;http://opensource.example.com/&amp;quot; and not&lt;br /&gt;
    &amp;quot;http://example.com/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
    Now suppose the editor re-edits the story, adding important information&lt;br /&gt;
    about Linux. He or she at that point adds the Linux tid 7 with a weight&lt;br /&gt;
    of 30. Now when it is saved, tid 1 is added since 30 &amp;gt;= 30. Now the&lt;br /&gt;
    story will appear at both URLs.&lt;br /&gt;
&lt;br /&gt;
    Now suppose the editor is instructed that this story must be removed&lt;br /&gt;
    from &amp;quot;http://opensource.example.com/&amp;quot;, though it should stay on the main&lt;br /&gt;
    page &amp;quot;http://example.com/&amp;quot;. In the admin.pl editor, he or she adds tid 3&lt;br /&gt;
    with weight 0. That by itself would remove both nexuses when the story&lt;br /&gt;
    saves, since the 0 would prohibit both child tids from propagating&lt;br /&gt;
    higher than tid 3 up to tid 1. Upon clicking Preview, the admin sees&lt;br /&gt;
    that &amp;quot;This story will not appear&amp;quot; (see admin.pl&lt;br /&gt;
    getDescForTopicsRendered()). So the admin also adds tid 1 -- any weight&lt;br /&gt;
    greater than 0 would do, but weight of 30 makes the most sense since the&lt;br /&gt;
    backend describes that as &amp;quot;Mainpageworthy.&amp;quot; Once this story is saved,&lt;br /&gt;
    its rows in story_topics_chosen are:&lt;br /&gt;
&lt;br /&gt;
            tid 1, weight 30&lt;br /&gt;
            tid 3, weight  0&lt;br /&gt;
            tid 4, weight 10&lt;br /&gt;
            tid 7, weight 10&lt;br /&gt;
&lt;br /&gt;
    and its rows in story_topics_rendered are:&lt;br /&gt;
&lt;br /&gt;
            tid 1, weight 30&lt;br /&gt;
            tid 4, weight 10&lt;br /&gt;
            tid 7, weight 10&lt;br /&gt;
&lt;br /&gt;
    Note that, as far as almost all of the code is concerned, the weight&lt;br /&gt;
    value in story_topics_rendered is irrelevant; only whether a row exists&lt;br /&gt;
    or not is noted. (This is why weight of 0 never appears in that table.)&lt;br /&gt;
&lt;br /&gt;
DISPLAY OPTIONS AND WEIGHTS&lt;br /&gt;
    So how are these values of weights 10 and 30 decided, and what are 20&lt;br /&gt;
    and 50 for?&lt;br /&gt;
&lt;br /&gt;
    Previously in Slash, there were three possible values for a story's&lt;br /&gt;
    displaystatus: Never Display, Section-Only, and Always Display.&lt;br /&gt;
    Section-Only meant to only display a story in its section's homepage,&lt;br /&gt;
    not the site's main page, and Always Display meant to display a story&lt;br /&gt;
    both places.&lt;br /&gt;
&lt;br /&gt;
    Now that a story may be part of more than one skin (the new term for&lt;br /&gt;
    &amp;quot;section&amp;quot;), that distinction is not so simple. While the method&lt;br /&gt;
    _displaystatus() will return an old-style displaystatus value for a&lt;br /&gt;
    story, this is for reverse compatibility and is deprecated. The proper&lt;br /&gt;
    question now takes two arguments instead of one: is a story to be&lt;br /&gt;
    displayed _in_ a particular skin.&lt;br /&gt;
&lt;br /&gt;
    The answer to that question is very simple; if a row exists in&lt;br /&gt;
    story_topics_rendered with the story's stoid and the topic's tid, then&lt;br /&gt;
    yes; otherwise, no.&lt;br /&gt;
&lt;br /&gt;
    To prevent everything from breaking at once, and to keep the backend&lt;br /&gt;
    story list looking much the same as it did before (white background for&lt;br /&gt;
    Always Display, light gray for Section-Only, dark gray for Never&lt;br /&gt;
    Display), the &amp;quot;mainpage skin&amp;quot; was created. Defined by the var&lt;br /&gt;
    mainpage_skid [sic, a skid is a skin's numeric primary key], this&lt;br /&gt;
    defines which skin a story must be in to be considered &amp;quot;Always Display.&amp;quot;&lt;br /&gt;
    It also defines which topic nexus will be colored blue instead of yellow&lt;br /&gt;
    in admin.pl?op=topictree (you will need GraphViz installed to see this;&lt;br /&gt;
    see plugins/Admin/README). Nevertheless, Slash is now well-equipped to&lt;br /&gt;
    run a website which consists of many subsites, at different URLs,&lt;br /&gt;
    perhaps only loosely networked and not necessarily with one central&lt;br /&gt;
    &amp;quot;main&amp;quot; page.&lt;br /&gt;
&lt;br /&gt;
    multiple skins and how index.pl uses stories.primaryskid&lt;br /&gt;
&lt;br /&gt;
    skins.cookiedomain and the cookiedomain var&lt;br /&gt;
&lt;br /&gt;
    the Topiclist&lt;br /&gt;
&lt;br /&gt;
    the topic chooser&lt;br /&gt;
&lt;br /&gt;
    no admin.pl interface to edit topic tree yet, but op=topictree (and&lt;br /&gt;
    GraphViz, see plugins/Admin/README)&lt;br /&gt;
&lt;br /&gt;
    suggestions for a clean topic tree (use min_weight 10 to connect&lt;br /&gt;
    many/most topics to logical categorizations, which could/should be&lt;br /&gt;
    nexuses, then connect those to mainpage with min_weight 30, finally&lt;br /&gt;
    bring loose topics to mainpage with min_weight 30)&lt;br /&gt;
&lt;br /&gt;
    utils/convertDBto200406&lt;br /&gt;
&lt;br /&gt;
    and _suggest and how it can be used to advise on a better topic tree&lt;br /&gt;
&lt;br /&gt;
    and _render which needs to be run&lt;br /&gt;
&lt;br /&gt;
VERSION&lt;br /&gt;
    $Id$&lt;br /&gt;
&lt;br /&gt;
[root@slashcode docs]#  &lt;br /&gt;
[root@slashcode docs]# ls&lt;br /&gt;
boilerplates          HOWTO-Themes.html   sectiontopics.txt  slashstyle.txt&lt;br /&gt;
dopods.plx            HOWTO-Themes.pod    slasherd.fig       slashtables.html&lt;br /&gt;
formkeys.txt          HOWTO-Themes.txt    slasherd.pdf       slashtables.pod&lt;br /&gt;
HOWTO-Plugins.html    INSTALL.pod         slasherd.ps        slashtables.txt&lt;br /&gt;
HOWTO-Plugins.pod     INSTALL.txt         slashguide.html    slashtags.html&lt;br /&gt;
HOWTO-Plugins.txt     README.pod          slashguide.pod     slashtags.pod&lt;br /&gt;
HOWTO-Templates.html  README.txt          slashguide.txt     slashtags.txt&lt;br /&gt;
HOWTO-Templates.pod   sectiontopics.html  slashstyle.html&lt;br /&gt;
HOWTO-Templates.txt   sectiontopics.pod   slashstyle.pod&lt;br /&gt;
[root@slashcode docs]# more sectiontopics.txt &lt;br /&gt;
NAME&lt;br /&gt;
    sectiontopics - Information about the section-topics rewrite, June 2004&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
    In June 2004, the way Slash handles categorization of stories into&lt;br /&gt;
    topics was changed. The confusing relationship between topics, sections,&lt;br /&gt;
    and subsections, which limited choices, was bolted on to the old system&lt;br /&gt;
    as our needs evolved.&lt;br /&gt;
&lt;br /&gt;
    The &amp;quot;section-topics&amp;quot; rewrite, as it's being called, took a look at those&lt;br /&gt;
    needs with the perspective of hindsight, and developed a new system&lt;br /&gt;
    which will be less confusing in the long run. It provides the&lt;br /&gt;
    flexibility that large sites' admins will need, while still retaining&lt;br /&gt;
    ease of use for smaller sites' admins.&lt;br /&gt;
&lt;br /&gt;
    This document attempts to explain the changes for Slash administrators,&lt;br /&gt;
    and it may be informative reading for Slash authors and editors too.&lt;br /&gt;
&lt;br /&gt;
CONCEPTS&lt;br /&gt;
    I'm not going to bother explaining exactly how the old system worked,&lt;br /&gt;
    because it's dead now. Suffice it to say that every story had one&lt;br /&gt;
    section and one or more topics, those being two distinct and disjoint&lt;br /&gt;
    categorizations. Subsections were invented to allow finer-grained&lt;br /&gt;
    control than what sections permitted, and there were ways to constrain&lt;br /&gt;
    certain topics to only being available in certain sections.&lt;br /&gt;
&lt;br /&gt;
    The &amp;quot;section&amp;quot; data type was always confused about whether it wanted to&lt;br /&gt;
    be a categorization and descriptor, or a visual display modifier. In&lt;br /&gt;
    other words, regarding an object that it was assigned to like a story,&lt;br /&gt;
    &amp;quot;section&amp;quot; implied facts about both its data and how it should be viewed.&lt;br /&gt;
    Being in the &amp;quot;Book Reviews&amp;quot; section on Slashdot, for example, implied&lt;br /&gt;
    that additional data like ISBN would be stored along with the rest of&lt;br /&gt;
    the story's data. Being in the &amp;quot;Developers&amp;quot; section meant that it would&lt;br /&gt;
    be grouped with other developer-related stories and that it would appear&lt;br /&gt;
    blue instead of green. If a story was a book review for developers,&lt;br /&gt;
    there was no way to put it in both places; having that blue color meant&lt;br /&gt;
    that no ISBN data could be stored.&lt;br /&gt;
&lt;br /&gt;
    So &amp;quot;section&amp;quot; has been split into two: &amp;quot;skin&amp;quot; and &amp;quot;nexus&amp;quot;. *Most* of the&lt;br /&gt;
    information that went with a section was used to describe appearances,&lt;br /&gt;
    and that went over to skin. So a skin now controls color (through the&lt;br /&gt;
    skin_colors table), it controls which templates are used (the final part&lt;br /&gt;
    of a template's three-part name is now skin, not section), and it&lt;br /&gt;
    controls with which other stories a story is grouped (on which index&lt;br /&gt;
    page). And the non-display aspects of sections -- mainly, the&lt;br /&gt;
    &amp;quot;section_extras&amp;quot; data which ensured that stories in Book Reviews stored&lt;br /&gt;
    a field for ISBN -- were sent over to nexuses.&lt;br /&gt;
&lt;br /&gt;
    Each skin has precisely one nexus; you can think of a skin as drawing&lt;br /&gt;
    its stories from its nexus. The clever part is that a nexus is just a&lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# &lt;br /&gt;
[root@slashcode docs]# cat sectiontopics.txt &lt;br /&gt;
NAME&lt;br /&gt;
    sectiontopics - Information about the section-topics rewrite, June 2004&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
    In June 2004, the way Slash handles categorization of stories into&lt;br /&gt;
    topics was changed. The confusing relationship between topics, sections,&lt;br /&gt;
    and subsections, which limited choices, was bolted on to the old system&lt;br /&gt;
    as our needs evolved.&lt;br /&gt;
&lt;br /&gt;
    The &amp;quot;section-topics&amp;quot; rewrite, as it's being called, took a look at those&lt;br /&gt;
    needs with the perspective of hindsight, and developed a new system&lt;br /&gt;
    which will be less confusing in the long run. It provides the&lt;br /&gt;
    flexibility that large sites' admins will need, while still retaining&lt;br /&gt;
    ease of use for smaller sites' admins.&lt;br /&gt;
&lt;br /&gt;
    This document attempts to explain the changes for Slash administrators,&lt;br /&gt;
    and it may be informative reading for Slash authors and editors too.&lt;br /&gt;
&lt;br /&gt;
CONCEPTS&lt;br /&gt;
    I'm not going to bother explaining exactly how the old system worked,&lt;br /&gt;
    because it's dead now. Suffice it to say that every story had one&lt;br /&gt;
    section and one or more topics, those being two distinct and disjoint&lt;br /&gt;
    categorizations. Subsections were invented to allow finer-grained&lt;br /&gt;
    control than what sections permitted, and there were ways to constrain&lt;br /&gt;
    certain topics to only being available in certain sections.&lt;br /&gt;
&lt;br /&gt;
    The &amp;quot;section&amp;quot; data type was always confused about whether it wanted to&lt;br /&gt;
    be a categorization and descriptor, or a visual display modifier. In&lt;br /&gt;
    other words, regarding an object that it was assigned to like a story,&lt;br /&gt;
    &amp;quot;section&amp;quot; implied facts about both its data and how it should be viewed.&lt;br /&gt;
    Being in the &amp;quot;Book Reviews&amp;quot; section on Slashdot, for example, implied&lt;br /&gt;
    that additional data like ISBN would be stored along with the rest of&lt;br /&gt;
    the story's data. Being in the &amp;quot;Developers&amp;quot; section meant that it would&lt;br /&gt;
    be grouped with other developer-related stories and that it would appear&lt;br /&gt;
    blue instead of green. If a story was a book review for developers,&lt;br /&gt;
    there was no way to put it in both places; having that blue color meant&lt;br /&gt;
    that no ISBN data could be stored.&lt;br /&gt;
&lt;br /&gt;
    So &amp;quot;section&amp;quot; has been split into two: &amp;quot;skin&amp;quot; and &amp;quot;nexus&amp;quot;. *Most* of the&lt;br /&gt;
    information that went with a section was used to describe appearances,&lt;br /&gt;
    and that went over to skin. So a skin now controls color (through the&lt;br /&gt;
    skin_colors table), it controls which templates are used (the final part&lt;br /&gt;
    of a template's three-part name is now skin, not section), and it&lt;br /&gt;
    controls with which other stories a story is grouped (on which index&lt;br /&gt;
    page). And the non-display aspects of sections -- mainly, the&lt;br /&gt;
    &amp;quot;section_extras&amp;quot; data which ensured that stories in Book Reviews stored&lt;br /&gt;
    a field for ISBN -- were sent over to nexuses.&lt;br /&gt;
&lt;br /&gt;
    Each skin has precisely one nexus; you can think of a skin as drawing&lt;br /&gt;
    its stories from its nexus. The clever part is that a nexus is just a&lt;br /&gt;
    special kind of topic (which we call a topic_nexus when we want to&lt;br /&gt;
    emphasize that it is both). So if a story has both the Developers&lt;br /&gt;
    topic_nexus, and the Book Reviews topic_nexus, then it will appear on&lt;br /&gt;
    both books.slashdot.org and developers.slashdot.org. And the additional&lt;br /&gt;
    data stored with the story will include the union of all the &amp;quot;extras&amp;quot;&lt;br /&gt;
    data -- not only ISBN and so on, but also any &amp;quot;extras&amp;quot; data that may be&lt;br /&gt;
    in the Developers nexus. There don't actually happen to be any extras&lt;br /&gt;
    for Developers on Slashdot, so maybe this isn't the best example, but if&lt;br /&gt;
    there were, a story that was categorized into both nexuses would include&lt;br /&gt;
    that data too.&lt;br /&gt;
&lt;br /&gt;
    Authors are no longer restricted from choosing any topic with any story.&lt;br /&gt;
    Since a nexus is a topic like any other, an author who wishes to make&lt;br /&gt;
    sure a story shows up in the Apple skin can pick the Apple nexus&lt;br /&gt;
    specifically. But what's more likely to happen is that an author will&lt;br /&gt;
    pick topics that make sense for the story (like &amp;quot;Mac OS X&amp;quot;) and that the&lt;br /&gt;
    weights assigned to those topics will propagate upwards into the correct&lt;br /&gt;
    nexus(es) where the story should appear.&lt;br /&gt;
&lt;br /&gt;
    Along the way, stories were given a numeric primary key (stoid), as were&lt;br /&gt;
    skins. Don't worry, a story's sid still works just as it did before; no&lt;br /&gt;
    Slash URLs are required to change, and in particular all the URLs (for&lt;br /&gt;
    search.pl and index.pl) that had &amp;quot;section=&amp;quot; as a parameter still do.&lt;br /&gt;
&lt;br /&gt;
WEIGHTS&lt;br /&gt;
    Each topic picked for a story now must have a weight assigned to it.&lt;br /&gt;
    Weights are floating-point non-negative numbers. The templates shipped&lt;br /&gt;
    with the stock theme assume that authors will be assigning only the&lt;br /&gt;
    weights 0, 10, 20, 30, 40, or 50, but the only weight value that the&lt;br /&gt;
    core code treats specially is 0 (which means &amp;quot;ignore this topic&amp;quot;). How&lt;br /&gt;
    positive weights affect the categorization of stories depends entirely&lt;br /&gt;
    on the topic_parents table.&lt;br /&gt;
&lt;br /&gt;
    Even in the old system, topics could be arranged into a tree -- but to&lt;br /&gt;
    properly represent section-specific topics one would have to layer&lt;br /&gt;
    additional data on top of the tree, confusing matters somewhat. Now,&lt;br /&gt;
    topics (including nexuses) really do form a tree, which is to say a&lt;br /&gt;
    directed graph. All topic-related data is loaded into a $slashd object&lt;br /&gt;
    at once, when getTopicTree is called.&lt;br /&gt;
&lt;br /&gt;
    One key difference between the old system and the new is that,&lt;br /&gt;
    previously, a topic had at most one parent. Now, a topic may have zero&lt;br /&gt;
    or more parents. This allows a topic of &amp;quot;Darwin&amp;quot; to be a child of both&lt;br /&gt;
    &amp;quot;Apple&amp;quot; and &amp;quot;BSD,&amp;quot; which conceptually means that it is a subcategory of&lt;br /&gt;
    both, and which practically means that assigning &amp;quot;Darwin&amp;quot; a weight will&lt;br /&gt;
    allow that weight to propagate up to both.&lt;br /&gt;
&lt;br /&gt;
RENDERING&lt;br /&gt;
    This process of weight-propagation occurs when chosen topics are&lt;br /&gt;
    rendered. Each parent-child relationship from one topic to another&lt;br /&gt;
    includes a minimum weight. For any given story, if topic T1 is assigned&lt;br /&gt;
    weight W, and topic T2 is the parent of T1 with min_weight M, then T2&lt;br /&gt;
    will also be assigned weight W for the story if, and only if, M &amp;lt;= W.&lt;br /&gt;
&lt;br /&gt;
    That assignment continues recursively (to topic T3, and so on) in a&lt;br /&gt;
    process called &amp;quot;rendering&amp;quot; -- performed by renderTopics(). A story&lt;br /&gt;
    author stores his or her topic/weight duples in the story_topics_chosen&lt;br /&gt;
    table, and at story save time, these choices are rendered into a&lt;br /&gt;
    (probably larger) collection of topic/weight duples that are stored in&lt;br /&gt;
    the story_topics_rendered table.&lt;br /&gt;
&lt;br /&gt;
    (The above rule describes most of what is involved in the rendering&lt;br /&gt;
    process. The other rules in the algorithm are that if multiple children&lt;br /&gt;
    of differing weights both propagate up to the same parent, the greater&lt;br /&gt;
    of those weights become the parent's; and that any topic's chosen&lt;br /&gt;
    weight, including a weight of 0, always overrides any weight propagating&lt;br /&gt;
    up from its children.)&lt;br /&gt;
&lt;br /&gt;
    Finally, when the collection of rendered topic/weight duples has been&lt;br /&gt;
    fully formed, all topics with weight 0 are dropped. Weight 0 can exist&lt;br /&gt;
    in chosen topics, but never in rendered topics.&lt;br /&gt;
&lt;br /&gt;
A SIMPLE EXAMPLE&lt;br /&gt;
    That may sound a bit complicated, so here's a description using the&lt;br /&gt;
    default topics and topic_parents included with the default &amp;quot;slashcode&amp;quot;&lt;br /&gt;
    theme:&lt;br /&gt;
&lt;br /&gt;
    tid 1: mainpage (also a nexus)&lt;br /&gt;
    tid 3: opensource (also a nexus)&lt;br /&gt;
    tid 4: slash&lt;br /&gt;
    tid 7: linux&lt;br /&gt;
&lt;br /&gt;
    Tid 4 has tid 3 as a parent, with that relationship having a min_weight&lt;br /&gt;
    of 10 associated with it.&lt;br /&gt;
&lt;br /&gt;
    Tid 7 also have tid 3 as a parent, with min_weight 10.&lt;br /&gt;
&lt;br /&gt;
    Tid 3 has tid 1 as a parent, with min_weight 30.&lt;br /&gt;
&lt;br /&gt;
    The skin at &amp;quot;http://example.com/&amp;quot; reads the nexus tid 1; the skin at&lt;br /&gt;
    &amp;quot;http://opensource.example.com/&amp;quot; reads the nexus tid 3.&lt;br /&gt;
&lt;br /&gt;
    Suppose an editor is working on a story about Slash and assigns it the&lt;br /&gt;
    topic &amp;quot;slash,&amp;quot; tid 4, with weight 10. Weight 10 is described as&lt;br /&gt;
    &amp;quot;Sectional only&amp;quot; in the code. When that story is saved, renderTopics&lt;br /&gt;
    recursively propagates the weight of its topics, or in this case its&lt;br /&gt;
    single topic, up to parents, or in this case parent. Rendering adds tid&lt;br /&gt;
    3, also at weight 10. It does not add tid 1 since !(10 &amp;gt;= 30). The story&lt;br /&gt;
    thus will appear only on &amp;quot;http://opensource.example.com/&amp;quot; and not&lt;br /&gt;
    &amp;quot;http://example.com/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
    Now suppose the editor re-edits the story, adding important information&lt;br /&gt;
    about Linux. He or she at that point adds the Linux tid 7 with a weight&lt;br /&gt;
    of 30. Now when it is saved, tid 1 is added since 30 &amp;gt;= 30. Now the&lt;br /&gt;
    story will appear at both URLs.&lt;br /&gt;
&lt;br /&gt;
    Now suppose the editor is instructed that this story must be removed&lt;br /&gt;
    from &amp;quot;http://opensource.example.com/&amp;quot;, though it should stay on the main&lt;br /&gt;
    page &amp;quot;http://example.com/&amp;quot;. In the admin.pl editor, he or she adds tid 3&lt;br /&gt;
    with weight 0. That by itself would remove both nexuses when the story&lt;br /&gt;
    saves, since the 0 would prohibit both child tids from propagating&lt;br /&gt;
    higher than tid 3 up to tid 1. Upon clicking Preview, the admin sees&lt;br /&gt;
    that &amp;quot;This story will not appear&amp;quot; (see admin.pl&lt;br /&gt;
    getDescForTopicsRendered()). So the admin also adds tid 1 -- any weight&lt;br /&gt;
    greater than 0 would do, but weight of 30 makes the most sense since the&lt;br /&gt;
    backend describes that as &amp;quot;Mainpageworthy.&amp;quot; Once this story is saved,&lt;br /&gt;
    its rows in story_topics_chosen are:&lt;br /&gt;
&lt;br /&gt;
            tid 1, weight 30&lt;br /&gt;
            tid 3, weight  0&lt;br /&gt;
            tid 4, weight 10&lt;br /&gt;
            tid 7, weight 10&lt;br /&gt;
&lt;br /&gt;
    and its rows in story_topics_rendered are:&lt;br /&gt;
&lt;br /&gt;
            tid 1, weight 30&lt;br /&gt;
            tid 4, weight 10&lt;br /&gt;
            tid 7, weight 10&lt;br /&gt;
&lt;br /&gt;
    Note that, as far as almost all of the code is concerned, the weight&lt;br /&gt;
    value in story_topics_rendered is irrelevant; only whether a row exists&lt;br /&gt;
    or not is noted. (This is why weight of 0 never appears in that table.)&lt;br /&gt;
&lt;br /&gt;
DISPLAY OPTIONS AND WEIGHTS&lt;br /&gt;
    So how are these values of weights 10 and 30 decided, and what are 20&lt;br /&gt;
    and 50 for?&lt;br /&gt;
&lt;br /&gt;
    Previously in Slash, there were three possible values for a story's&lt;br /&gt;
    displaystatus: Never Display, Section-Only, and Always Display.&lt;br /&gt;
    Section-Only meant to only display a story in its section's homepage,&lt;br /&gt;
    not the site's main page, and Always Display meant to display a story&lt;br /&gt;
    both places.&lt;br /&gt;
&lt;br /&gt;
    Now that a story may be part of more than one skin (the new term for&lt;br /&gt;
    &amp;quot;section&amp;quot;), that distinction is not so simple. While the method&lt;br /&gt;
    _displaystatus() will return an old-style displaystatus value for a&lt;br /&gt;
    story, this is for reverse compatibility and is deprecated. The proper&lt;br /&gt;
    question now takes two arguments instead of one: is a story to be&lt;br /&gt;
    displayed _in_ a particular skin.&lt;br /&gt;
&lt;br /&gt;
    The answer to that question is very simple; if a row exists in&lt;br /&gt;
    story_topics_rendered with the story's stoid and the topic's tid, then&lt;br /&gt;
    yes; otherwise, no.&lt;br /&gt;
&lt;br /&gt;
    To prevent everything from breaking at once, and to keep the backend&lt;br /&gt;
    story list looking much the same as it did before (white background for&lt;br /&gt;
    Always Display, light gray for Section-Only, dark gray for Never&lt;br /&gt;
    Display), the &amp;quot;mainpage skin&amp;quot; was created. Defined by the var&lt;br /&gt;
    mainpage_skid [sic, a skid is a skin's numeric primary key], this&lt;br /&gt;
    defines which skin a story must be in to be considered &amp;quot;Always Display.&amp;quot;&lt;br /&gt;
    It also defines which topic nexus will be colored blue instead of yellow&lt;br /&gt;
    in admin.pl?op=topictree (you will need GraphViz installed to see this;&lt;br /&gt;
    see plugins/Admin/README). Nevertheless, Slash is now well-equipped to&lt;br /&gt;
    run a website which consists of many subsites, at different URLs,&lt;br /&gt;
    perhaps only loosely networked and not necessarily with one central&lt;br /&gt;
    &amp;quot;main&amp;quot; page.&lt;br /&gt;
&lt;br /&gt;
    multiple skins and how index.pl uses stories.primaryskid&lt;br /&gt;
&lt;br /&gt;
    skins.cookiedomain and the cookiedomain var&lt;br /&gt;
&lt;br /&gt;
    the Topiclist&lt;br /&gt;
&lt;br /&gt;
    the topic chooser&lt;br /&gt;
&lt;br /&gt;
    no admin.pl interface to edit topic tree yet, but op=topictree (and&lt;br /&gt;
    GraphViz, see plugins/Admin/README)&lt;br /&gt;
&lt;br /&gt;
    suggestions for a clean topic tree (use min_weight 10 to connect&lt;br /&gt;
    many/most topics to logical categorizations, which could/should be&lt;br /&gt;
    nexuses, then connect those to mainpage with min_weight 30, finally&lt;br /&gt;
    bring loose topics to mainpage with min_weight 30)&lt;br /&gt;
&lt;br /&gt;
    utils/convertDBto200406&lt;br /&gt;
&lt;br /&gt;
    and _suggest and how it can be used to advise on a better topic tree&lt;br /&gt;
&lt;br /&gt;
    and _render which needs to be run&lt;/div&gt;</summary>
		<author><name>50.45.173.59</name></author>
	</entry>
</feed>