Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/01/2011, 22:24
August
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 2 meses
Puntos: 10
Respuesta: Porque alguna APPs guardan los templates en SQL

Estuve viendo en vBulletin 3.6 de la cual tengo licencia

Código PHP:
Ver original
  1. function cache_templates($templates, $templateidlist)
  2. {
  3.     global $vbulletin, $templateassoc;
  4.  
  5.     if (empty($templateassoc))
  6.     {
  7.         $templateassoc = unserialize($templateidlist);
  8.     }
  9.  
  10.     if ($vbulletin->options['legacypostbit'] AND in_array('postbit', $templates))
  11.     {
  12.         $templateassoc['postbit'] = $templateassoc['postbit_legacy'];
  13.     }
  14.  
  15.     foreach ($templates AS $template)
  16.     {
  17.         $templateids[] = intval($templateassoc["$template"]);
  18.     }
  19.  
  20.     if (!empty($templateids))
  21.     {
  22.         // run query
  23.         $temps = $vbulletin->db->query_read_slave("
  24.             SELECT title, template
  25.             FROM " . TABLE_PREFIX . "template
  26.             WHERE templateid IN (" . implode(',', $templateids) . ")
  27.         ");
  28.  
  29.         // cache templates
  30.         while ($temp = $vbulletin->db->fetch_array($temps))
  31.         {
  32.             if (empty($vbulletin->templatecache["$temp[title]"]))
  33.             {
  34.                 $vbulletin->templatecache["$temp[title]"] = $temp['template'];
  35.             }
  36.         }
  37.         $vbulletin->db->free_result($temps);
  38.     }
  39.  
  40.     $vbulletin->bbcode_style = array(
  41.         'code'  => &$templateassoc['bbcode_code_styleid'],
  42.         'html'  => &$templateassoc['bbcode_html_styleid'],
  43.         'php'   => &$templateassoc['bbcode_php_styleid'],
  44.         'quote' => &$templateassoc['bbcode_quote_styleid']
  45.     );
  46.  
  47. }
  48.  
  49. // #############################################################################
  50. /**
  51. * Returns a single template from the templatecache or the database
  52. *
  53. * @param    string  Name of template to be fetched
  54. * @param    integer Escape quotes in template? 1: escape template; -1: unescape template; 0: do nothing
  55. * @param    boolean Wrap template in HTML comments showing the template name?
  56. *
  57. * @return   string
  58. */
  59. function fetch_template($templatename, $escape = 0, $gethtmlcomments = true)
  60. {
  61.     // gets a template from the db or from the local cache
  62.     global $style, $vbulletin, $tempusagecache, $templateassoc;
  63.  
  64.     // use legacy postbit if necessary
  65.     if ($vbulletin->options['legacypostbit'] AND $templatename == 'postbit')
  66.     {
  67.         $templatename = 'postbit_legacy';
  68.     }
  69.  
  70.     if (isset($vbulletin->templatecache["$templatename"]))
  71.     {
  72.         $template = $vbulletin->templatecache["$templatename"];
  73.     }
  74.     else
  75.     {
  76.         DEVDEBUG("Uncached template: $templatename");
  77.         $GLOBALS['_TEMPLATEQUERIES']["$templatename"] = true;
  78.  
  79.         $fetch_tid = intval($templateassoc["$templatename"]);
  80.         if (!$fetch_tid)
  81.         {
  82.             $gettemp = array('template' => '');
  83.         }
  84.         else
  85.         {
  86.             $gettemp = $vbulletin->db->query_first_slave("
  87.                 SELECT template
  88.                 FROM " . TABLE_PREFIX . "template
  89.                 WHERE templateid = $fetch_tid
  90.             ");
  91.         }
  92.         $template = $gettemp['template'];
  93.         $vbulletin->templatecache["$templatename"] = $template;
  94.     }
  95.  
  96.     // **************************
  97.     /*
  98.     if ($template == '<<< FILE >>>')
  99.     {
  100.         $template = addslashes(implode('', file("./templates/$templatename.html")));
  101.         $vbulletin->templatecache["$templatename"] = $template;
  102.     }
  103.     */
  104.     // **************************
  105.  
  106.     switch($escape)
  107.     {
  108.         case 1:
  109.             // escape template
  110.             $template = addslashes($template);
  111.             $template = str_replace("\\'", "'", $template);
  112.             break;
  113.  
  114.         case -1:
  115.             // unescape template
  116.             $template = stripslashes($template);
  117.             break;
  118.     }
  119.  
  120.     if (isset($tempusagecache["$templatename"]))
  121.     {
  122.         ++$tempusagecache["$templatename"];
  123.     }
  124.     else
  125.     {
  126.         $tempusagecache["$templatename"] = 1;
  127.     }
  128.  
  129.     if ($vbulletin->options['addtemplatename'] AND $gethtmlcomments)
  130.     {
  131.         $templatename = preg_replace('#[^a-z0-9_]#i', '', $templatename);
  132.         return "<!-- BEGIN TEMPLATE: $templatename -->\n$template\n<!-- END TEMPLATE: $templatename -->";
  133.     }
  134.  
  135.     return $template;
  136. }

Si te fijas el "cacheo" lo hace al obtener de la base de datos los templates y guardarlos en un array, tu crees que con guardarlo en un array, sea suficiente para decir que esta guardado en cache ? Tomando parte del codigo anterior, o hay alguna otra cosa que hace para guardar en cache?

Código PHP:
Ver original
  1. // cache templates
  2.         while ($temp = $vbulletin->db->fetch_array($temps))
  3.         {
  4.             if (empty($vbulletin->templatecache["$temp[title]"]))
  5.             {
  6.                 $vbulletin->templatecache["$temp[title]"] = $temp['template'];
  7.             }
  8.         }