Переписать путь к корневому каталогу "/" для Javascript - PullRequest
5 голосов
/ 21 июня 2011

Мы можем изменить путь к корневому каталогу документа для PHP, используя

$_SERVER['DOCUMENT_ROOT'] = "to/some/new/directory";
//Now the "/" which represent the ^(above) path

в .htaccess, у нас есть

RewriteBase "/to/some/new/directory"

Теперь мне нужно изменить путь к корневому каталогу для использования вJavaScript.Как это сделать?

В настоящее время я объявляю переменную, содержащую статический путь к моему персонализированному корневому каталогу, и использую ее как

var root = "../to/new/path";
document.location = root+"/somepage.php";

Сценарий

Я думаю, что яЯ должен немного рассказать о сценарии, чтобы вы, ребята, поняли мою идею

Стандартный корневой веб-каталог

http_docs/

, внутри которого находится главная папка

http_docs/application <-- contains the actual application
http_docs/js <-- contains the script
http_docs/index.html

Теперь приложение также содержит функцию ajax для обновления, редактирования, загрузки нового контента или других ресурсов, которые при обращении к «/» будут отображаться в / some / path / i / named not / application / some / path / i / said,

Чтобы обойти эту проблему, я могу определить статическую переменную, такую ​​как

var root = "application/";

, и использовать ее где-нибудь как

$.post(....., function(data) { $(body).append("<img src='"+root+"resources/img1.jpg"); });

Но для одного использования, определяяПуть, как статический, может не иметь большого значения, но, когда приложение растет, и определенная модификация заставит меня изменить все пути, которые я даю в части js.Я подумал, что было бы разумно, точно так же, как я делаю это на PHP, используя <img src="/resources/img1.jpg" />

Я изо всех сил пытался объяснить этот вопрос, если все еще не понятно, пожалуйста, сообщество, давайте поможем им понять.Я приветствую вас, чтобы отредактировать мой вопрос.

Ответы [ 2 ]

5 голосов
/ 21 июня 2011

РЕДАКТИРОВАНИЕ: Попытка ответить на обновленный вопрос Предполагая, что JavaScript вызывается включенным из файла index.html, если вы вставите тег img и используете относительные URL-адреса, они будут относительно пути к файлу индекса. Так что <img src='application/resources/img1.jpg'> будет работать просто отлично. Если скрипт должен работать для нескольких подуровней (например, если странице «application / etc / etc2 / somePage.html» нужны изображения из «application / resources /»), может быть проще использовать абсолютные URL-адреса, и вы можете включить блок javascript на каждой странице, сгенерированной php, которая содержит абсолютный URL-адрес «корня» приложения, например:

<!-- included by php in all html pages, e.g. in defautlHeadter.php -->
<script type="text/javascript">
   var rootUrl = "<?= getTheRootUrl() ?>";
</script>

Где getTheRootUrl() - это метод или переменная сервера, которая дает нужный корневой URL-адрес. Если URL переведен / переназначен (apache и т. Д. Вне того, что видимо php), вам может понадобиться жестко закодировать корневой URL в методе php, но по крайней мере это будет только один файл, который нужно изменить, если вы когда-нибудь измените корневой каталог. .

Затем вы можете использовать корневой URL для указания абсолютных путей в любом месте приложения / веб-сайта, используя rootUrl + "/some/relative/path" в любом месте приложения.

0 голосов
/ 21 июня 2011

Я однажды сделал что-то вроде этого, чтобы установить

window.app_absolute = '<?php echo GetRelativePath(dirname(__FILE__)); ?>'

Я также использую что-то вроде этого

static function GetRelativePath($path)
{
    $dr = $_SERVER['DOCUMENT_ROOT']; //Probably Apache situated

    if (empty($dr)) //Probably IIS situated
    {
        //Get the document root from the translated path.
        $pt = str_replace('\\\\', '/', Server::GetVar('PATH_TRANSLATED',
            Server::GetVar('ORIG_PATH_TRANSLATED')));
        $dr = substr($pt, 0, -strlen(Server::GetVar('SCRIPT_NAME')));
    }

    $dr = str_replace('\\\\', '/', $dr);

    return substr(str_replace('\\', '/', str_replace('\\\\', '/', $path)), strlen($dr));
}

... Что-то в этом роде, взломанное для демонстрационных целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...