Joomla的升级带来的麻烦
昨天上班的时候登录了Joomla系统想改改文章,结果系统提示有最新的3.1.0版本,我想都没想直接就点击更新了,后来报错提示说某些目录无法访问,后来通过sftp赋予目录相应的权限了,到这里一切都还是正常,升级完毕后我点击首页上看,首页一团糟,糟了,我的模板被替换了。。。没想到升级这么蛋疼,而且还没备份template,这叫我如何是好啊,一个正式的系统都已经上线了那么久了,还好没多少人访问量,只有趁着没有下班赶快。。。我这真是自讨苦吃唉。
原本我使用的是由isis后台(administrator)模板改编成的前台模板,默认前台的模板太丑都不入我眼,而且因为我们的需求主要是在智能型手机上访问使用的,但是isis模板又不提供前台的,只有自己写了,上一次改起码也是好几周前了,改了很多CSS和index.php,我几乎都忘记了,这次又要重头开始,唉多后悔当初弄一个git把code保存起来,说这些都没有用了,不过希望我这次做第二次相同的事情的时候能有许多新的发现。下面附上昨天通过记忆复原的代码。。
<?php /** * @package Joomla.Administrator * @subpackage Templates.isis * @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 3.0 */ defined('_JEXEC') or die; $app = JFactory::getApplication(); $doc = JFactory::getDocument(); $lang = JFactory::getLanguage(); $this->language = $doc->language; $this->direction = $doc->direction; $input = $app->input; $user = JFactory::getUser(); // Add JavaScript Frameworks JHtml::_('bootstrap.framework'); $doc->addScript('templates/' .$this->template. '/js/template.js'); // Add Stylesheets $doc->addStyleSheet('templates/' . $this->template . '/css/template.css'); // Load optional rtl bootstrap css and bootstrap bugfixes JHtmlBootstrap::loadCss($includeMaincss = false, $this->direction); // Load specific language related CSS $file = 'language/' . $lang->getTag() . '/' . $lang->getTag() . '.css'; if (is_file($file)) { $doc->addStyleSheet($file); } // Detecting Active Variables $option = $input->get('option', ''); $view = $input->get('view', ''); $layout = $input->get('layout', ''); $task = $input->get('task', ''); $itemid = $input->get('Itemid', ''); $sitename = $app->getCfg('sitename'); $cpanel = ($option === 'com_cpanel'); $showSubmenu = false; $this->submenumodules = JModuleHelper::getModules('submenu'); foreach ($this->submenumodules as $submenumodule) { $output = JModuleHelper::renderModule($submenumodule); if (strlen($output)) { $showSubmenu = true; break; } } // Logo file if ($this->params->get('logoFile')) { $logo = JURI::root() . $this->params->get('logoFile'); } else { $logo = $this->baseurl . "/templates/" . $this->template . "/images/logo.png"; } // Template Parameters $displayHeader = $this->params->get('displayHeader', '1'); $statusFixed = $this->params->get('statusFixed', '1'); $stickyToolbar = $this->params->get('stickyToolbar', '1'); ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <jdoc:include type="head" /> <?php // Template color if ($this->params->get('templateColor')) { ?> <style type="text/css"> .navbar-inner, .navbar-inverse .navbar-inner, .nav-list > .active > a, .nav-list > .active > a:hover, .dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover, .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle, #status.status-top { background: <?php echo $this->params->get('templateColor');?>; } .navbar-inner, .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle{ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .25), inset 0 -1px 0 rgba(0, 0, 0, .1), inset 0 30px 10px rgba(0, 0, 0, .2); -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .25), inset 0 -1px 0 rgba(0, 0, 0, .1), inset 0 30px 10px rgba(0, 0, 0, .2); box-shadow: 0 1px 3px rgba(0, 0, 0, .25), inset 0 -1px 0 rgba(0, 0, 0, .1), inset 0 30px 10px rgba(0, 0, 0, .2); } </style> <?php } ?> <?php // Template header color if ($this->params->get('headerColor')) { ?> <style type="text/css"> .header { background: <?php echo $this->params->get('headerColor');?>; } </style> <?php } ?> <!--[if lt IE 9]> <script src="../media/jui/js/html5.js"></script> <![endif]--> </head> <body class="admin <?php echo $option . " view-" . $view . " layout-" . $layout . " task-" . $task . " itemid-" . $itemid . " ";?>" <?php if ($stickyToolbar) : ?>data-spy="scroll" data-target=".subhead" data-offset="87"<?php endif;?>> <!-- Top Navigation --> <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inner"> <div class="container-fluid"> <?php if ($this->params->get('admin_menus') != '0') : ?> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <?php endif; ?> <a class="brand" href="<?php echo JURI::root(); ?>" title="<?php echo $sitename; ?>" target="_blank"><?php echo JHtml::_('string.truncate', $sitename, 14, false, false);?> <i class="icon-out-2 small"></i></a> <?php if ($this->params->get('admin_menus') != '0') : ?> <div class="nav-collapse"> <?php else : ?> <div> <?php endif; ?> <jdoc:include type="modules" name="menu" style="none" /> <ul class="<?php if ($this->direction == 'rtl') : ?>nav<?php else : ?>nav pull-right<?php endif; ?>"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $user->name; ?> <b class="caret"></b></a> <ul class="dropdown-menu"> <jdoc:include type="modules" name="position-1" headerLevel="3" state="0 " /> </ul> </li> </ul> </div> <!--/.nav-collapse --> </div> </div> </nav> <?php if ((!$statusFixed) && ($this->countModules('status'))): ?> <!-- Begin Status Module --> <div id="status" class="navbar status-top hidden-phone"> <div class="btn-toolbar"> <jdoc:include type="modules" name="status" style="no" /> </div> <div class="clearfix"></div> </div> <!-- End Status Module --> <?php endif; ?> <!-- container-fluid --> <div class="container-fluid container-main"> <section id="content"> <!-- Begin Content --> <jdoc:include type="modules" name="top" style="xhtml" /> <div class="row-fluid"> <?php if ($showSubmenu) : ?> <div class="span2"> <jdoc:include type="modules" name="submenu" style="none" /> </div> <div class="span10"> <?php else : ?> <div class="span12"> <?php endif; ?> <jdoc:include type="message" /> <?php // Show the page title here if the header is hidden if (!$displayHeader): ?> <h1 class="content-title"><?php echo JHtml::_('string.truncate', $app->JComponentTitle, 0, false, false);?></h1> <?php endif; ?> <jdoc:include type="component" /> </div> </div> <jdoc:include type="modules" name="bottom" style="xhtml" /> <!-- End Content --> <div class="well well-small"><div class="module-title nav-header">热门文章</div><ul class="mostread"><jdoc:include type="modules" name="position-7"/> </ul> </div> </section> <hr /> <?php if (!$this->countModules('status')) : ?> <footer class="footer"> <p>© <?php echo $sitename; ?> <?php echo date('Y');?></p> </footer> <?php endif; ?> </div> <?php if (($statusFixed) && ($this->countModules('status'))) : ?> <!-- Begin Status Module --> <div id="status" class="navbar navbar-fixed-bottom hidden-phone"> <div class="btn-toolbar"> <div class="btn-group pull-right"> <p>© <?php echo $sitename; ?> <?php echo date('Y');?></p> </div> <jdoc:include type="modules" name="status" style="no" /> </div> </div> <!-- End Status Module --> <?php endif; ?> <jdoc:include type="modules" name="debug" style="none" /> <?php if ($stickyToolbar) : ?> <script> (function($){ // fix sub nav on scroll var $win = $(window) , $nav = $('.subhead') , navTop = $('.subhead').length && $('.subhead').offset().top - <?php if ($displayHeader || !$statusFixed) : ?>40<?php else:?>20<?php endif;?> , isFixed = 0 processScroll() // hack sad times - holdover until rewrite for 2.1 $nav.on('click', function () { if (!isFixed) setTimeout(function () { $win.scrollTop($win.scrollTop() - 47) }, 10) }) $win.on('scroll', processScroll) function processScroll() { var i, scrollTop = $win.scrollTop() if (scrollTop >= navTop && !isFixed) { isFixed = 1 $nav.addClass('subhead-fixed') } else if (scrollTop <= navTop && isFixed) { isFixed = 0 $nav.removeClass('subhead-fixed') } } })(jQuery); </script> <?php endif; ?> </body> </html>