[geeklog-hg] geeklog: Optimized TOPIC_breadcrumbs function

geeklog-cvs at lists.geeklog.net geeklog-cvs at lists.geeklog.net
Sat Jun 8 03:21:36 EDT 2013


changeset 9087:24e079a051fc
url:  http://project.geeklog.net/cgi-bin/hgwebdir.cgi/geeklog/rev/24e079a051fc
user: dengen
date: Sat Jun 08 16:21:06 2013 +0900
description:
Optimized TOPIC_breadcrumbs function

diffstat:

 public_html/layout/denim/breadcrumbs/breadcrumb.thtml                   |    4 +-
 public_html/layout/denim/breadcrumbs/breadcrumb_child.thtml             |    2 +-
 public_html/layout/denim/breadcrumbs/breadcrumb_nolink.thtml            |    2 +-
 public_html/layout/denim/breadcrumbs/breadcrumbs.thtml                  |    2 +-
 public_html/layout/modern_curve/breadcrumbs/breadcrumb.thtml            |    4 +-
 public_html/layout/modern_curve/breadcrumbs/breadcrumb_child.thtml      |    2 +-
 public_html/layout/modern_curve/breadcrumbs/breadcrumb_nolink.thtml     |    2 +-
 public_html/layout/modern_curve/breadcrumbs/breadcrumbs.thtml           |    2 +-
 public_html/layout/professional/breadcrumbs/breadcrumb.thtml            |    4 +-
 public_html/layout/professional/breadcrumbs/breadcrumb_child.thtml      |    2 +-
 public_html/layout/professional/breadcrumbs/breadcrumb_nolink.thtml     |    2 +-
 public_html/layout/professional/breadcrumbs/breadcrumbs.thtml           |    2 +-
 public_html/layout/professional_css/breadcrumbs/breadcrumb.thtml        |    4 +-
 public_html/layout/professional_css/breadcrumbs/breadcrumb_child.thtml  |    2 +-
 public_html/layout/professional_css/breadcrumbs/breadcrumb_nolink.thtml |    2 +-
 public_html/layout/professional_css/breadcrumbs/breadcrumbs.thtml       |    2 +-
 system/lib-topic.php                                                    |  198 ++++-----
 17 files changed, 104 insertions(+), 134 deletions(-)

diffs (truncated from 396 to 300 lines):

diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/denim/breadcrumbs/breadcrumb.thtml
--- a/public_html/layout/denim/breadcrumbs/breadcrumb.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/denim/breadcrumbs/breadcrumb.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,5 +1,5 @@
-<a href="{url}" itemprop="url">
-    <span itemprop="title">{name}</span>
+<a href="{url}"{!if microdata} itemprop="url"{!endif}>
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span>
 </a> {separator}
 {breadcrumb_child}
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/denim/breadcrumbs/breadcrumb_child.thtml
--- a/public_html/layout/denim/breadcrumbs/breadcrumb_child.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/denim/breadcrumbs/breadcrumb_child.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,3 +1,3 @@
-<span itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+<span{!if microdata} itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb"{!endif}>
     {breadcrumb}
 </span>
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/denim/breadcrumbs/breadcrumb_nolink.thtml
--- a/public_html/layout/denim/breadcrumbs/breadcrumb_nolink.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/denim/breadcrumbs/breadcrumb_nolink.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,3 +1,3 @@
-    <span itemprop="title">{name}</span> {separator}
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span> {separator}
 {breadcrumb_child}
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/denim/breadcrumbs/breadcrumbs.thtml
--- a/public_html/layout/denim/breadcrumbs/breadcrumbs.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/denim/breadcrumbs/breadcrumbs.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,5 +1,5 @@
 <!-- Start of Breadcrumbs Navigation -->
-<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="bc_navigation">
+<div {!if microdata}itemscope itemtype="http://data-vocabulary.org/Breadcrumb" {!endif}class="bc_navigation">
     {breadcrumbs_list}
 </div>
 <!-- End of Breadcrumbs Navigation -->
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/modern_curve/breadcrumbs/breadcrumb.thtml
--- a/public_html/layout/modern_curve/breadcrumbs/breadcrumb.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/modern_curve/breadcrumbs/breadcrumb.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,5 +1,5 @@
-<a href="{url}" itemprop="url">
-    <span itemprop="title">{name}</span>
+<a href="{url}"{!if microdata} itemprop="url"{!endif}>
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span>
 </a> {separator}
 {breadcrumb_child}
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/modern_curve/breadcrumbs/breadcrumb_child.thtml
--- a/public_html/layout/modern_curve/breadcrumbs/breadcrumb_child.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/modern_curve/breadcrumbs/breadcrumb_child.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,3 +1,3 @@
-<span itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+<span{!if microdata} itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb"{!endif}>
     {breadcrumb}
 </span>
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/modern_curve/breadcrumbs/breadcrumb_nolink.thtml
--- a/public_html/layout/modern_curve/breadcrumbs/breadcrumb_nolink.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/modern_curve/breadcrumbs/breadcrumb_nolink.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,3 +1,3 @@
-    <span itemprop="title">{name}</span> {separator}
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span> {separator}
 {breadcrumb_child}
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/modern_curve/breadcrumbs/breadcrumbs.thtml
--- a/public_html/layout/modern_curve/breadcrumbs/breadcrumbs.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/modern_curve/breadcrumbs/breadcrumbs.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,6 +1,6 @@
 <!-- Start of Breadcrumbs Navigation -->
 <p>
-<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+<div{!if microdata} itemscope itemtype="http://data-vocabulary.org/Breadcrumb"{!endif}>
     {breadcrumbs_list}
 </div>
 </p>
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional/breadcrumbs/breadcrumb.thtml
--- a/public_html/layout/professional/breadcrumbs/breadcrumb.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional/breadcrumbs/breadcrumb.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,5 +1,5 @@
-<a href="{url}" itemprop="url">
-    <span itemprop="title">{name}</span>
+<a href="{url}"{!if microdata} itemprop="url"{!endif}>
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span>
 </a> {separator}
 {breadcrumb_child}
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional/breadcrumbs/breadcrumb_child.thtml
--- a/public_html/layout/professional/breadcrumbs/breadcrumb_child.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional/breadcrumbs/breadcrumb_child.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,3 +1,3 @@
-<span itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+<span{!if microdata} itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb"{!endif}>
     {breadcrumb}
 </span>
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional/breadcrumbs/breadcrumb_nolink.thtml
--- a/public_html/layout/professional/breadcrumbs/breadcrumb_nolink.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional/breadcrumbs/breadcrumb_nolink.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,3 +1,3 @@
-    <span itemprop="title">{name}</span> {separator}
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span> {separator}
 {breadcrumb_child}
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional/breadcrumbs/breadcrumbs.thtml
--- a/public_html/layout/professional/breadcrumbs/breadcrumbs.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional/breadcrumbs/breadcrumbs.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,6 +1,6 @@
 <!-- Start of Breadcrumbs Navigation -->
 <p>
-<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+<div{!if microdata} itemscope itemtype="http://data-vocabulary.org/Breadcrumb"{!endif}>
     {breadcrumbs_list}
 </div>
 </p>
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional_css/breadcrumbs/breadcrumb.thtml
--- a/public_html/layout/professional_css/breadcrumbs/breadcrumb.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional_css/breadcrumbs/breadcrumb.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,8 +1,8 @@
 
 <!-- breadcrumbs/breadcrumb.thtml { -->
 
-<a href="{url}" itemprop="url">
-    <span itemprop="title">{name}</span>
+<a href="{url}"{!if microdata} itemprop="url"{!endif}>
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span>
 </a> {separator}
 {breadcrumb_child}
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional_css/breadcrumbs/breadcrumb_child.thtml
--- a/public_html/layout/professional_css/breadcrumbs/breadcrumb_child.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional_css/breadcrumbs/breadcrumb_child.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,7 +1,7 @@
 
 <!-- breadcrumbs/breadcrumb_child.thtml { -->
 
-<span itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+<span{!if microdata} itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb"{!endif}>
     {breadcrumb}
 </span>
 
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional_css/breadcrumbs/breadcrumb_nolink.thtml
--- a/public_html/layout/professional_css/breadcrumbs/breadcrumb_nolink.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional_css/breadcrumbs/breadcrumb_nolink.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -1,7 +1,7 @@
 
 <!-- breadcrumbs/breadcrumb_nolink.thtml { -->
 
-    <span itemprop="title">{name}</span> {separator}
+    <span{!if microdata} itemprop="title"{!endif}>{name}</span> {separator}
 {breadcrumb_child}
 
 <!-- } breadcrumbs/breadcrumb_nolink.thtml -->
diff -r e37edd00d3d6 -r 24e079a051fc public_html/layout/professional_css/breadcrumbs/breadcrumbs.thtml
--- a/public_html/layout/professional_css/breadcrumbs/breadcrumbs.thtml	Sat May 25 22:00:10 2013 -0400
+++ b/public_html/layout/professional_css/breadcrumbs/breadcrumbs.thtml	Sat Jun 08 16:21:06 2013 +0900
@@ -3,7 +3,7 @@
 
 <!-- Start of Breadcrumbs Navigation -->
 <p>
-<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+<div{!if microdata} itemscope itemtype="http://data-vocabulary.org/Breadcrumb"{!endif}>
     {breadcrumbs_list}
 </div>
 </p>
diff -r e37edd00d3d6 -r 24e079a051fc system/lib-topic.php
--- a/system/lib-topic.php	Sat May 25 22:00:10 2013 -0400
+++ b/system/lib-topic.php	Sat Jun 08 16:21:06 2013 +0900
@@ -1376,9 +1376,9 @@
 }
 
 /**
-* If found returns one or more html breadcrumb. Used by Topics, Stories and Plugins. 
+* If found returns one or more html breadcrumb. Used by Topics, Stories and Plugins.
 *
-* @param    string          $type   Type of object to create breadcrumb trail  
+* @param    string          $type   Type of object to create breadcrumb trail
 * @param    string/array    $id     ID of object
 * @return   string                  1 or more breadcrumb trail in html
 *
@@ -1386,135 +1386,105 @@
 function TOPIC_breadcrumbs($type, $id)
 {
     global $_CONF, $_TABLES, $LANG27, $_TOPICS, $topic;
-    
-    
+
     $breadcrumbs_output = '';
-    
+
     // see if breadcrumbs is disabled
-    if (($_CONF['disable_breadcrumbs_topics'] && $type == 'topic') || ($_CONF['disable_breadcrumbs_articles'] && $type == 'article') || ($_CONF['disable_breadcrumbs_plugins'] && $type != 'topic' && $type != 'article') ) {
+    if (($_CONF['disable_breadcrumbs_topics'] && $type == 'topic') ||
+        ($_CONF['disable_breadcrumbs_articles'] && $type == 'article') ||
+        ($_CONF['disable_breadcrumbs_plugins'] && $type != 'topic' && $type != 'article')) {
         return $breadcrumbs_output;
     }
-    
-    $breadcrumb_t = COM_newTemplate($_CONF['path_layout'] . 'breadcrumbs/');
-    $breadcrumb_t->set_file (array ('breadcrumbs_t' => 'breadcrumbs.thtml',
-                                    'breadcrumb_child_t' => 'breadcrumb_child.thtml',
-                                    'breadcrumb_root_t' => 'breadcrumb_root.thtml',
-                                    'breadcrumb_nolink_t' => 'breadcrumb_nolink.thtml',
-                                    'breadcrumb_t' => 'breadcrumb.thtml'));        
-    
+
     if ($type == 'topic') {
-        $sql = "SELECT tid FROM {$_TABLES['topics']} 
-            WHERE tid = '{$id}'" . COM_getPermSQL('AND', 0, 2);
+        $sql = "SELECT tid, topic, parent_id FROM {$_TABLES['topics']} "
+             . "WHERE tid = '$id'" . COM_getPermSQL('AND', 0, 2);
     } else {
         // Retrieve all topics assignments that point to this object
-        $sql = "SELECT ta.tid FROM {$_TABLES['topic_assignments']} ta, {$_TABLES['topics']} t 
-            WHERE ta.type = '{$type}' AND ta.id = '{$id}' and t.tid = ta.tid" . COM_getPermSQL('AND', 0, 2, 't');
-            
-            if (!$_CONF['multiple_breadcrumbs']) {
-                $sql .= " AND ta.tid = '{$topic}'";        
-            }
+        $sql = "SELECT t.tid, t.topic, t.parent_id "
+             . "FROM {$_TABLES['topic_assignments']} ta, {$_TABLES['topics']} t "
+             . "WHERE ta.type = '$type' AND ta.id = '$id' AND t.tid = ta.tid"
+             . COM_getPermSQL('AND', 0, 2, 't');
+
+        if (!$_CONF['multiple_breadcrumbs']) {
+            $sql .= " AND ta.tid = '$topic'";
+        }
     }
     $result = DB_query($sql);
-    $nrows = DB_numRows($result);
+    if (DB_numRows($result) > 0) {
+        $breadcrumb_t = COM_newTemplate($_CONF['path_layout'] . 'breadcrumbs/');
+        $breadcrumb_t->set_file(array(
+            'breadcrumbs_t'       => 'breadcrumbs.thtml',
+            'breadcrumb_child_t'  => 'breadcrumb_child.thtml',
+            'breadcrumb_root_t'   => 'breadcrumb_root.thtml',
+            'breadcrumb_nolink_t' => 'breadcrumb_nolink.thtml',
+            'breadcrumb_t'        => 'breadcrumb.thtml'));
+        if (in_array($_CONF['doctype'], array('html5', 'xhtml5'))) {
+            $breadcrumb_t->set_var('microdata', true);
+        }
+        $rootname = $_CONF['breadcrumb_root_site_name'] ?
+            $_CONF['site_name'] : $LANG27['breadcrumb_root'];
+        $separator = htmlspecialchars($LANG27['breadcrumb_separator']);
 
-    if ($nrows > 0) {
         while ($A = DB_fetchArray($result)) {
-            $sql = "SELECT tid, topic, parent_id FROM {$_TABLES['topics']} WHERE tid = '{$A['tid']}'";
-            $resultB = DB_query($sql);
-            while ($B = DB_fetchArray($resultB)) {
-                $breadcrumb_a = array();
-                
-                $breadcrumb_a[]['id'] = $B['tid'];
-                end($breadcrumb_a);
-                $breadcrumb_a[key($breadcrumb_a)]['title'] = $B['topic'];
-                
-                if ($B['parent_id'] != TOPIC_ROOT) {
-                    $sql = "SELECT tid, topic, parent_id FROM {$_TABLES['topics']} WHERE tid = '{$B['parent_id']}'";
-                    $resultC = DB_query($sql);
-                    while ($C = DB_fetchArray($resultC)) {    
-                        $breadcrumb_a[]['id'] = $C['tid'];
-                        end($breadcrumb_a);
-                        $breadcrumb_a[key($breadcrumb_a)]['title'] = $C['topic'];
-    
-                        if ($C['parent_id'] != TOPIC_ROOT) {
-                            $sql = "SELECT tid, topic, parent_id FROM {$_TABLES['topics']} WHERE tid = '{$C['parent_id']}'";
-                            $resultC = DB_query($sql);
-                        } else {
-                            $breadcrumb_a[]['id'] = TOPIC_ROOT;
-                            end($breadcrumb_a);
-                            
-                            if ($_CONF['breadcrumb_root_site_name']) {
-                                $rootname = $_CONF['site_name'];
-                            } else {
-                                $rootname = $LANG27['breadcrumb_root'];
-                            }
-                            $breadcrumb_a[key($breadcrumb_a)]['title'] = $rootname;
-                        }
+            $breadcrumb_a = array();
+            $breadcrumb_a[] = $A;
+            $parent_id = $A['parent_id'];
+            while ($parent_id != TOPIC_ROOT) {
+                $sql = "SELECT tid, topic, parent_id "
+                     . "FROM {$_TABLES['topics']} WHERE tid = '$parent_id'";
+                $resultB = DB_query($sql);
+                if (DB_numRows($resultB) !== 1) break;
+                $B = DB_fetchArray($resultB);
+                $breadcrumb_a[] = $B;
+                $parent_id = $B['parent_id'];
+            }
+            $breadcrumb_a[] = array(
+                'tid' => TOPIC_ROOT,
+                'topic' => $rootname,
+                'parent_id' => '');
+
+            $retval = '';
+            foreach ($breadcrumb_a as $value) {
+                // double check access (users may have access to a subtopic
+                // but not a parent topic, this shouldn't really happen though)
+                $topic_access = 0;
+                $topic_index = TOPIC_getIndex($value['tid']);
+                if ($topic_index > 0) {



More information about the geeklog-cvs mailing list