Magento / Zend не разрешает символические ссылки - PullRequest
6 голосов
/ 17 декабря 2010

Кто-нибудь знает, почему Magento не разрешает символические ссылки для файлов шаблона .phtml, которые находятся вне папки app / design?

Если я создаю символическую ссылку в этой папке, она работает нормально, но если она связана вне этого, она не работает.Похоже, что это что-то вроде прав доступа / безопасности, но я нигде не могу найти информацию.

Возможно, настройка Zend?http://zend -framework-community.634137.n4.nabble.com / Zend-Инструмент не работает с символическими ссылками в пути включения td662569.html

Кто-нибудь?

ВОЗМОЖНОЕ РЕШЕНИЕ: Благодаря предложенному Аланом предложению ниже я нашел обходной путь - поскольку я буду использовать его только для локального развития, я достаточно счастлив.На случай, если это кому-нибудь поможет, я добавлю это сюда.Поэтому я вставляю следующее в core / Mage / Core / Block / Template.php, сразу после строки Varien_Profiler :: start ($ fileName);

    $storeId = Mage::app()->getStore()->getId();
    $theme = Mage::getStoreConfig('design/package/name', $storeId);
    Mage::Log($this->_viewDir.DS.$fileName); 
    $includes = $this->_viewDir.DS.$fileName; 
    if(strpos($includes, 'frontend/'.$theme )) { 
         include $this->_viewDir.DS.$fileName;
        };

ИспользованиеЗдесь оператор IF останавливает дублирование любых базовых шаблонов и пропускает только ваши пользовательские шаблоны тем.

Ответы [ 5 ]

18 голосов
/ 01 сентября 2011

Начиная с Magento 1.5.1.0 (может быть, 1.5.x?), Есть опция в Система> Конфигурация> Разработчик> Настройки шаблона> Разрешить символические ссылки , которую вы можете включить.необходимость грязных хаков / обходных путей больше.: -)

5 голосов
/ 01 января 2011

Это было вызвано изменением в 1.4.2, когда Magento больше не допускает символьные папки.Если вы загляните в Template.php

        $includeFilePath = realpath($this->_viewDir . DS . $fileName);
        if (strpos($includeFilePath, realpath($this->_viewDir)) === 0) {
            include $includeFilePath;
        } else {
            Mage::log('Not valid template file:'.$fileName, Zend_Log::CRIT, null, null, true);

        }

, вы увидите, что он не загрузится, если шаблон не находится в «viewDir».

3 голосов
/ 05 июля 2011

нашел другое милое решение, которое работает для меня:

sshfs 192.168.1.12:/srv/www/vhosts/dev.****.*****.de/media/catalog/product/ catalog/product/ -o allow_other

это монтирует удаленную файловую систему через sshfs, опция allow_other необходима, чтобы файлы монтировались из удаленного блока без прав доступа к файлу удаленного блока:

Эта опция позволит вам использовать -o allow_other в вашей команде SSHFS, что позволит вашему пользователю без полномочий root получить доступ к конкретному ресурсу, который вы монтируете.

надеюсь, это поможет любому из вас

2 голосов
/ 13 января 2011

Я также использую символические ссылки на свой пользовательский код, и мне удалось преодолеть эту проблему с помощью mount --bind вместо создания символических ссылок, например. каталог пользовательских тем: / home / user / workspace / magento / app / design / frontend / default / mytheme

cd <magento dir>/app/design/frontend/default
mkdir mytheme
sudo mount --bind /home/user/workspace/magento/app/design/frontend/default/mytheme mytheme

Этот метод будет не работать на OSX.

0 голосов
/ 17 декабря 2010

Добавить код регистрации в блок базового шаблона

#File: app/code/core/Mage/Core/Block/Template.php
public function fetchView($fileName)
{
    ...
    Mage::Log($this->_viewDir.DS.$fileName); 
    var_dump($this->_viewDir.DS.$fileName);
    include $this->_viewDir.DS.$fileName;
    ...
}

В конечном счете, рендеринг блока шаблона - это вызов include с системным путем. Как только вы получите путь, который Magento создает для вашего шаблона, создайте однострочный PHP-файл

<?php
include('/path/that/was/logged/foo.phtml');

И попытка загрузить шаблон. Это должно позволить вам определить причину сбоя любого конкретного вызова. Мое непосредственное предположение - настройка безопасного режима PHP, но я уже давно боролся с ограничениями общего хостинга.

Удачи!

...