⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 theme.php

📁 讲的是网络编程
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		global $xoopsModule, $xoopsLogger;

		if ( $_SERVER['REQUEST_METHOD'] != 'POST' && $this->contentCacheLifetime ) {
			$template = $this->contentTemplate ? $this->contentTemplate : 'db:system_dummy.html';
			$dirname = $xoopsModule->getVar( 'dirname', 'n' );

			$this->template->caching = 2;
			$this->template->cache_lifetime = $this->contentCacheLifetime;
			$uri = str_replace( XOOPS_URL, '', $_SERVER['REQUEST_URI'] );
			// Clean uri by removing session id
			if (defined('SID') && SID && strpos($uri, SID)) {
				$uri = preg_replace("/([\?&])(".SID."$|".SID."&)/", "\\1", $uri);
			}
			$this->contentCacheId = $this->generateCacheId($dirname . '|' . $uri);

			if ( $this->template->is_cached( $template, $this->contentCacheId ) ) {
	            $xoopsLogger->addExtra( $template,	sprintf('Cached (regenerates every %d seconds)', $this->contentCacheLifetime  ) );
				$this->render( null, null, $template );
				return true;
            }
		}
		return false;
	}

	/**
	 * Render the page
	 *
	 * The theme engine builds pages from 2 templates: canvas and content.
	 *
	 * A module can call this method directly and specify what templates the theme engine must use.
	 * If render() hasn't been called before, the theme defaults will be used for the canvas and
	 * page template (and xoopsOption['template_main'] for the content).
	 *
	 * @param string $canvasTpl		The canvas template, if different from the theme default
	 * @param string $pageTpl		The page template, if different from the theme default (unsupported, 2.3+ only)
	 * @param string $contentTpl	The content template
	 * @param array	 $vars			Template variables to send to the template engine
	 */
	function render( $canvasTpl = null, $pageTpl = null, $contentTpl = null, $vars = array() ) {
		global $xoops, $xoopsLogger, $xoopsOption;

		if ( $this->renderCount ) {
			return false;
		}
		$xoopsLogger->startTime( 'Page rendering' );

		// @internal: Lame fix to ensure the metas specified in the xoops config page don't appear twice
		$old = array( 'robots', 'keywords', 'description', 'rating', 'author', 'copyright' );
		foreach ( $this->metas['meta'] as $name => $value ) {
			if ( in_array( $name, $old ) ) {
				$this->template->assign( "xoops_meta_$name", htmlspecialchars( $value, ENT_QUOTES ) );
				unset( $this->metas['meta'][$name] );
			}
		}

		if ( $canvasTpl )		$this->canvasTemplate	= $canvasTpl;
		if ( $contentTpl )		$this->contentTemplate	= $contentTpl;

		if ( !empty( $vars ) ) {
			$this->template->assign( $vars );
		}
		if ( $this->contentTemplate ) {
			$this->content = $this->template->fetch( $this->contentTemplate, $this->contentCacheId );
		}
		if ( $this->bufferOutput ) {
			$this->content .= ob_get_contents();
			ob_end_clean();
		}
		$this->template->assign_by_ref( 'xoops_contents', $this->content );

		$header = empty($xoopsOption['xoops_module_header']) ? $this->template->get_template_vars( 'xoops_module_header' ) : $xoopsOption['xoops_module_header'];
		$this->template->assign( 'xoops_module_header', $header . "\n" . $this->renderMetas( null, true ) );

		if ( !empty($xoopsOption['xoops_pagetitle']) ) {
			$this->template->assign( 'xoops_pagetitle', $xoopsOption['xoops_pagetitle'] );
		}

		// Do not cache the main (theme.html) template output
		$this->template->caching = 0;
		$this->template->display( $this->path . '/' . $this->canvasTemplate );

		$this->renderCount++;
		$xoopsLogger->stopTime( 'Page rendering' );
	}

	/**#@+ @tasktype 20 Manipulating page meta-information*/
    /**
    * Adds script code to the document head
    *
    * This methods allows the insertion of an external script file (if $src is provided), or
    * of a script snippet. The file URI is parsed to take benefit of the theme resource
    * overloading system.
    *
    * The $attributes parameter allows you to specify the attributes that will be added to the
    * inserted <script> tag. If unspecified, the <var>type</var> attribute value will default to
    * 'text/javascript'.
    *
    * <code>
    * // Add an external script using a physical path
    * $theme->addScript( 'www/script.js', null, '' );
    * $theme->addScript( 'modules/newbb/script.js', null, '' );
    * // Specify attributes for the <script> tag
    * $theme->addScript( 'mod_xoops_SiteManager#common.js', array( 'type' => 'application/x-javascript' ), '' );
    * // Insert a code snippet
    * $theme->addScript( null, array( 'type' => 'application/x-javascript' ), 'window.open("Hello world");' );
    * </code>
    *
    * @param string $src path to an external script file
    * @param array $attributes hash of attributes to add to the <script> tag
    * @param string $content Code snippet to output within the <script> tag
    *
    * @return void
    **/
    function addScript( $src = '', $attributes = array(), $content = '' ) {
    	global $xoops;
    	if ( empty( $attributes ) )     		$attributes = array();
		if ( !empty( $src ) ) 					$attributes['src'] = $xoops->url( $this->resourcePath( $src ) );
		if ( !empty( $content ) )				$attributes['_'] = $content;
		if ( !isset( $attributes['type'] ) ) 	$attributes['type'] = 'text/javascript';
		$this->addMeta( 'script', $src, $attributes );
    }
    /**
     * Add StyleSheet or CSS code to the document head
     * @param string $src path to .css file
     * @param array $attributes name => value paired array of attributes such as title
     * @param string $content CSS code to output between the <style> tags (in case $src is empty)
     *
     * @return void
     **/
    function addStylesheet( $src = '', $attributes = array(), $content = '' ) {
    	global $xoops;
    	if ( empty( $attributes ) )     		$attributes = array();
		if ( !empty( $src ) ) 					$attributes['href'] = $xoops->url( $this->resourcePath( $src ) );
		if ( !isset($attributes['type']) ) 		$attributes['type'] = 'text/css';
		if ( !empty( $content ) ) 				$attributes['_'] = $content;
    	$this->addMeta( 'stylesheet', $src, $attributes );
    }
	/**
	  * Add a <link> to the header
	  * @param string	$rel		Relationship from the current doc to the anchored one
	  * @param string	$href		URI of the anchored document
	  * @param array		$attributes	Additional attributes to add to the <link> element
	  */
	function addLink( $rel, $href = '', $attributes = array() ) {
		global $xoops;
    	if ( empty( $attributes ) )     		$attributes = array();
		if ( !empty( $href ) ) 					$attributes['href'] = $href;
		$this->addMeta( 'link', $rel, $attributes );
	}
	/**
	 * Set a meta http-equiv value
	 */
	function addHttpMeta( $name, $value = null ) {
		if ( isset($value) ) {
			return $this->addMeta( 'http', $name, $value );
		}
		unset( $this->metas['http'][$name] );
	}
	/**
	 * Change output page meta-information
	 */
    function addMeta( $type = 'meta', $name = '', $value = '' ) {
		if ( !isset( $this->metas[$type] ) ) {
			$this->metas[$type] = array();
		}
    	if ( isset($name) ) {
			$this->metas[$type][$name] = $value;
		} else {
			$this->metas[$type][] = 	$value;
		}
		return $value;
    }

	function headContent( $params, $content, &$smarty, &$repeat ) {
		if ( !$repeat ) {
			$this->htmlHeadStrings[] = $content;
		}
	}

	function renderMetas( $type = null, $return = false ) {
		$str = '';
		if ( !isset($type) ) {
			foreach ( array_keys($this->metas) as $type ) {
				$str .= $this->renderMetas( $type, true );
			}
			$str .= implode( "\n", $this->htmlHeadStrings );
		} else {
			switch ( $type ) {
			case 'script':
				foreach ( $this->metas[$type] as $attrs ) {
					$str .= '<script' . $this->renderAttributes( $attrs ) . ">\n";
					if ( @$attrs['_'] ) {
						$str .= "\n//<![CDATA[\n" . $attrs['_'] . "\n//]]>";
					}
					$str .= "</script>\n";
				}
				break;
			case 'link':
				foreach ( $this->metas[$type] as $rel => $attrs ) {
					$str .= '<link rel="' . $rel . '"' . $this->renderAttributes( $attrs ) . " />\n";
				}
				break;
			case 'stylesheet':
				foreach ( $this->metas[$type] as $attrs ) {
					if ( @$attrs['_'] ) {
						$str .= '<style' . $this->renderAttributes($attrs) . ">\n/* <![CDATA[ */\n" . $attrs['_'] . "\n/* //]]> */\n</style>";
					} else {
						$str .= '<link rel="stylesheet"' . $this->renderAttributes($attrs) . " />\n";
					}
				}
				break;
			case 'http':
				foreach ( $this->metas[$type] as $name => $content ) {
					$str .= '<meta http-equiv="' . htmlspecialchars( $name, ENT_QUOTES ) . '" content="' . htmlspecialchars( $content, ENT_QUOTES) . "\" />\n";
				}
				break;
			default:
				foreach ( $this->metas[$type] as $name => $content ) {
					$str .= '<meta name="' . htmlspecialchars( $name, ENT_QUOTES ) . '" content="' . htmlspecialchars( $content, ENT_QUOTES) . "\" />\n";
				}
				break;
			}
		}
		if ( $return ) {
			return $str;
		}
		echo $str;
		return true;
	}

	/**
	 * Generates a unique element ID
	 * @param string $tagName
	 * @return string
	 */
	function genElementId( $tagName = 'xos' ) {
		static $cache = array();
		if ( !isset( $cache[ $tagName ] ) ) {
			$cache[$tagName] = 1;
		}
		return $tagName . '-' . $cache[$tagName]++;
	}

	/**
	 * Transform an attributes collection to an XML string
	 * @param array $coll
	 * @return string
	 */
	function renderAttributes( $coll ) {
		$str = '';
		foreach ( $coll as $name => $val ) {
			if ( $name != '_' ) {
				$str .= ' ' . $name . '="' . htmlspecialchars( $val, ENT_QUOTES ) . '"';
			}
		}
		return $str;
	}

	/**
	 * Return a themable file resource path
	 *
	 * @param string $path
	 * @return string
	 */
	function resourcePath( $path ) {
		global $xoops;
		if ( substr( $path, 0, 1 ) == '/' ) {
			$path = substr( $path, 1 );
		}
		if ( file_exists( "$this->path/$path" ) ) {
			return "themes/$this->folderName/$path";
		}
		return $path;
	}




}


?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -