public static ipRelativeDir ( integer $callLevel ) : string | ||
$callLevel | integer | |
Résultat | string |
public static function ipRelativeDir($callLevel = 0)
{
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $callLevel + 1);
if (!isset($backtrace[$callLevel]['file'])) {
throw new \Ip\Exception("Can't find caller");
}
$absoluteFile = $backtrace[$callLevel]['file'];
if (DIRECTORY_SEPARATOR == '\\') {
// Replace windows paths
$absoluteFile = str_replace('\\', '/', $absoluteFile);
}
$overrides = ipConfig()->get('fileOverrides');
if ($overrides) {
foreach ($overrides as $relativePath => $fullPath) {
if (DIRECTORY_SEPARATOR == '\\') {
// Replace windows paths
$fullPath = str_replace('\\', '/', $fullPath);
}
if (strpos($absoluteFile, $fullPath) === 0) {
$relativeFile = substr_replace($absoluteFile, $relativePath, 0, strlen($fullPath));
return substr($relativeFile, 0, strrpos($relativeFile, '/') + 1);
}
}
}
$baseDir = ipConfig()->get('baseDir');
$baseDir = str_replace('\\', '/', $baseDir);
if (strpos($absoluteFile, $baseDir) !== 0) {
throw new \Ip\Exception('Cannot find relative path for file ' . esc($absoluteFile));
}
$relativeFile = substr($absoluteFile, strlen($baseDir) + 1);
return substr($relativeFile, 0, strrpos($relativeFile, '/') + 1);
}
/** * Get MVC view object * * Get a view object using specified view file and data array. * @param string $file MVC view file pathname. * @param array $data View's data. * @param int $_callerDepth * @return \Ip\View * @throws \Ip\Exception\View */ function ipView($file, $data = array(), $_callerDepth = 0) { if ($file[0] == '/' || $file[1] == ':') { // Absolute filename return new \Ip\View($file, $data); } if (preg_match('%^(Plugin|Theme|file|Ip)/%', $file)) { $relativePath = $file; } else { $relativePath = \Ip\Internal\PathHelper::ipRelativeDir($_callerDepth + 1) . $file; } $fileInThemeDir = ipThemeFile(\Ip\View::OVERRIDE_DIR . '/' . $relativePath); if (is_file($fileInThemeDir)) { return new \Ip\View($fileInThemeDir, $data); } $absolutePath = ipFile($relativePath); if (file_exists($absolutePath)) { // The most common case return new \Ip\View($absolutePath, $data); } // File was not found, check whether it is in theme override dir. if (strpos($relativePath, 'Theme/' . ipConfig()->theme() . '/override/') !== 0) { $file = esc($file); throw new \Ip\Exception\View("View {$file} not found."); } $pathFromWebsiteRoot = str_replace(ipFile('Theme/' . ipConfig()->theme() . '/override/'), '', $absolutePath); return ipView($pathFromWebsiteRoot); }