Magento: изменения макета с использованием ТОЛЬКО ЛОКАЛЬНОГО XML

Я новичок в magento и хотел бы настроить интерфейс магазина.

Я использую Magento 1.4.1 и планирую внести все изменения в файл local.xml моего нового шаблона.

Я сомневаюсь, что можно изменить структуру макета только с помощью local.xml. Я имею в виду без изменения файлов phtml.

Простой пример того, что я хотел бы иметь: я хочу разместить поиск по каталогу в другой части моего html, а не внутри , как сегодня. Поэтому я хотел бы удалить его из верхней панели и поместить в другой div.

<div class="top-bar">
<div class="breadcrumbs">
    <ul>
                    <li class="home">
                            <a href="http://www.domain.com/magento/" title="Ir para página principal">Principal</a>
                                        <span>/ </span>
                        </li>
                    <li class="category9">
                            <strong>Product Category</strong>
                                    </li>
            </ul>
</div><!--breadcrumbs-->
<form id="search_mini_form" action="http://www.domain.com/magento/catalogsearch/result/" method="get">
    <div class="form-search">
        <label for="search">Pesquisar</label>
        <input id="search" type="text" name="q" value="" class="input-text" />
        <button type="submit" title="Ir" class="button"><span><span>Ir</span></span></button>
        <div id="search_autocomplete" class="search-autocomplete"></div>
        <script type="text/javascript">
        //<![CDATA[
            var searchForm = new Varien.searchForm('search_mini_form', 'search', 'Procurar em toda a loja...');
            searchForm.initAutocomplete('http://www.domain.com/magento/catalogsearch/ajax/suggest/', 'search_autocomplete');
        //]]>
        </script>
    </div>
</form>
</div>   <!--top bar-->

Как мне это сделать? Можно ли использовать только local.xml?

Заранее спасибо и с наилучшими пожеланиями


person Fernando    schedule 29.11.2010    source источник


Ответы (1)


Практический ответ: «Нет, вы не можете этого сделать».

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

Вы используете local.xml для добавления, удаления и взаимодействия с блоками. Каждый файл phtml имеет родительский блок, который соответствует чему-то в вашем макете. Вы не можете изменить способ отображения блока phtml с помощью XML-макета, если только блок и phtml не содержат логику, позволяющую это сделать.

Теоретически вы могли бы

  1. Определите класс, ответственный за рендеринг конкретного шаблона.
  2. Создайте новый класс Block, который расширяет этот класс (не переопределяет)
  3. Измените код добавления в local.xml, чтобы заменить класс блока
  4. В вашем новом классе блоков переопределите метод рендеринга представления, поэтому он вызывает метод рендеринга родительского представления, а затем пытается изменить результаты возвращаемой строки перед возвратом ее значения.

Опять же все возможно, но сомнительно.

Почему вы не решаетесь заменить файл phtml из темы по умолчанию файлом phtml в вашей собственной теме (темах)?

person Alan Storm    schedule 29.11.2010
comment
отличный. Спасибо за ответ. Я считал, что это правильный способ сделать это, чтобы обновления были прозрачными и без проблем. Но кажется, что мне все еще нужно изменить phtml для структурных изменений html. :) - person Fernando; 30.11.2010
comment
Когда люди на форумах (и т. д.) говорят об этом, иногда они делают вид, что можно быть на 100% защищенным от обновления - я думаю, что это фантастика, за исключением особых случаев, когда вносятся минимальные изменения. - person shaune; 30.11.2010
comment
И просто предложить (общее) решение.... В дополнение к методу local.xml, я никогда не трогаю стандартные файлы phtml, а копирую их и помещаю в свою собственную папку темы, чтобы внести изменения . Таким образом, легко увидеть, какие изменения я сделал по умолчанию с помощью diff. Кроме того, когда я обновляюсь до следующей версии magento, я вижу, какие файлы phtml были обновлены в теме по умолчанию, и сравниваю их с моими настроенными файлами phtml. (мой метод предполагает, что какой-то тип scm, такой как mercurial/git/etc, может делать различия) - person shaune; 30.11.2010