Я пытаюсь загрузить файл CSS в пользовательский блок для своего сайта Concrete5, но у меня возникают проблемы. Импорт для моего CSS выглядит следующим образом:
$layout_dir = dirname(__FILE__) . '/';
<link href="<?php echo $layout_dir; ?>form.css" rel="stylesheet" type="text/css">
Который будет пытаться импортировать мои стили с этим URL:
http://pragmatic.dev/Users/brady/Code/pragmatic/public/packages/theme_caboodle/blocks/hero_block/form.css
Эта проблема мне нужен путь, чтобы исключить:
/Users/brady/Code/pragmatic/public
часть моего пути, поэтому основа пути — это корень моего проекта:
/packages/theme_caboodle/blocks/hero_block/form.css
Как я могу настроить свой импорт так, чтобы он включал только путь из корня проекта, как это?
/packages/theme_caboodle/blocks/hero_block/form.css
Мне также нужно, чтобы этот путь не ломался при установке на сервер или чью-либо локальную машину. Таким образом, другой пользователь, использующий этот блок, имеет другую структуру папок, потому что он скачал его с рынка, поэтому я должен помнить об этом.
Это мое решение до сих пор, но оно довольно грубое, я нахожу:
$baseDir = getcwd() . '/';
$fullDir = dirname(__FILE__) . '/';
//use this path for importing
$blockDir = str_replace("$baseDir","",$fullDir);
Предполагая, что вы ищете часть пути, начинающуюся с ‘/ packages’, будет выполнено следующее регулярное выражение:
$layout_dir = dirname(__FILE__) . '/';
preg_match('%/packages/.+%', $layout_dir, $matches);
Тогда $ match [0] содержит то, что вы ищете.
Есть разные способы но простой способ:
<?php
$layout_dir = "http://pragmatic.dev/Users/brady/Code/pragmatic/public/packages/theme_caboodle/blocks/hero_block";
echo removeFromUrl($layout_dir, "/public", 1); // 0 = Left of /public, 1 = Right of /public
function removeFromUrl($mDir, $mStringToSplit, $mNumber){
return explode($mStringToSplit, $mDir)[$mNumber] . "/";
}
Результат: