Initial commit
This commit is contained in:
112
vendor/houdini/classes/views.php
vendored
Normal file
112
vendor/houdini/classes/views.php
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
<?php
|
||||
/**
|
||||
* core/template/views.php
|
||||
*
|
||||
* This class is for managing template views.
|
||||
*
|
||||
* @version 3.0
|
||||
* @author Joey Kimsey <Joey@thetempusproject.com>
|
||||
* @link https://TheTempusProject.com/Core
|
||||
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
||||
*/
|
||||
namespace TheTempusProject\Houdini\Classes;
|
||||
|
||||
use TheTempusProject\Canary\Canary as Debug;
|
||||
|
||||
class Views extends Template {
|
||||
public static $additionalLocations = [];
|
||||
|
||||
/**
|
||||
* This function adds a standard view to the main {CONTENT}
|
||||
* section of the page.
|
||||
*
|
||||
* @param string $viewName - The name of the view being called.
|
||||
* @param wild $data - Any data to be used with the view.
|
||||
*
|
||||
* @todo add a check to viewName
|
||||
*/
|
||||
public static function view( $viewName, $data = null ) {
|
||||
if ( !empty( $data ) ) {
|
||||
$out = self::simpleView( $viewName, $data );
|
||||
} else {
|
||||
$out = self::simpleView( $viewName );
|
||||
}
|
||||
if ( !empty( $out ) ) {
|
||||
self::$content .= $out;
|
||||
} else {
|
||||
// new CustomException( 'view', $viewName );
|
||||
}
|
||||
}
|
||||
|
||||
public static function raw( $html ) {
|
||||
$out = self::parse( $html );
|
||||
self::$content .= $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a completely parsed view.
|
||||
*
|
||||
* NOTE: Results will contain raw HTML.
|
||||
*
|
||||
* @param {string} [$view] - The name of the view you wish to call.
|
||||
* @param {var} [$data] - Any data to be used by the view.
|
||||
* @return {string} HTML view.
|
||||
*/
|
||||
public static function simpleView( $view, $data = null ) {
|
||||
Debug::log( "Calling Standard: $view" );
|
||||
// all views start with lowercase letters
|
||||
$lowerCase = lcfirst( $view );
|
||||
// convert ., \, and /, to DIRECTORY_SEPARATOR
|
||||
$normalized = str_replace( '.', DIRECTORY_SEPARATOR, $lowerCase );
|
||||
$normalized = str_replace( '\\', DIRECTORY_SEPARATOR, $normalized );
|
||||
$normalized = str_replace( '/', DIRECTORY_SEPARATOR, $normalized );
|
||||
// trim any hanging DIRECTORY_SEPARATOR (shouldn't be necessary)
|
||||
$trimmed = rtrim( $normalized, DIRECTORY_SEPARATOR );
|
||||
// add the html extension
|
||||
$viewName = $trimmed . '.html';
|
||||
|
||||
// check the main views directory
|
||||
$path = VIEW_DIRECTORY . $viewName;
|
||||
Debug::log( "Trying location: $path" );
|
||||
if ( is_file( $path ) ) {
|
||||
if ( !empty( $data ) ) {
|
||||
return self::parse( file_get_contents( $path ), $data );
|
||||
} else {
|
||||
return self::parse( file_get_contents( $path ) );
|
||||
}
|
||||
}
|
||||
|
||||
// if the first part of the view name matches the name of an additionalLocation Index, we check there too
|
||||
$exploded = explode( DIRECTORY_SEPARATOR, $viewName );
|
||||
$potentialKey = array_shift( $exploded );
|
||||
$imploded = implode( DIRECTORY_SEPARATOR, $exploded );
|
||||
Debug::debug( "Trying potentialKey: $potentialKey" );
|
||||
Debug::debug( "Trying imploded: $imploded" );
|
||||
Debug::debug( 'additionalLocations: ' . var_export( self::$additionalLocations, true ) );
|
||||
if ( !empty( self::$additionalLocations[$potentialKey] ) ) {
|
||||
$path = self::$additionalLocations[$potentialKey] . $imploded;
|
||||
Debug::debug( "Trying path: $path" );
|
||||
}
|
||||
if ( is_file( $path ) ) {
|
||||
Debug::log( "WINNER path: $path" );
|
||||
if ( !empty( $data ) ) {
|
||||
return self::parse( file_get_contents( $path ), $data );
|
||||
} else {
|
||||
return self::parse( file_get_contents( $path ) );
|
||||
}
|
||||
}
|
||||
// @todo - this would be awesome, if i actually caught the exception anywhere :/
|
||||
// throw new CustomException('simpleView', $path);
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function addViewLocation( $name, $location ) {
|
||||
self::$additionalLocations[$name] = $location;
|
||||
}
|
||||
|
||||
public static function removeViewLocation( $name ) {
|
||||
if ( ! empty( self::$additionalLocations[$name] ) ) {
|
||||
unset( self::$additionalLocations[$name] );
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user