Я работаю над созданием того, что, как я надеюсь, когда-нибудь станет общедоступным расширением Magento (эта часть, которую я упоминаю, потому что для меня важно, что я делаю «правильную вещь» здесь). Одна из вещей, которые я хотел бы сделать, это добавить поле в панель инструментов Magento по умолчанию, в основном новую «коробку», точно такую же, как «Top 5 Search Terms», за исключением моего собственного контента. Я хотел бы, чтобы мой новый пользовательский ящик был последним полем, которое отображается (в идеале).Каков правильный способ добавления пользовательской панели «панели» в бэкэнде Magento без редактирования шаблонов по умолчанию?
Проблема, с которой я сталкиваюсь, заключается в том, что шаблон, отвечающий за визуализацию панели, вызывает выделение определенных блоков, и эти блоки вложены внутри html. Другими словами, где часто есть область, где дочерние блоки будут отображены в хороший разумный элемент HTML, в этой ситуации оказывается, что отображаются определенные блоки. Вот содержание /app/design/adminhtml/default/default/template/dashboard/index.phtml
<div class="dashboard-container">
<?php echo $this->getChildHtml('store_switcher') ?>
<table cellspacing="25" width="100%">
<tr>
<td><?php echo $this->getChildHtml('sales') ?>
<div class="entry-edit">
<div class="entry-edit-head"><h4><?php echo $this->__('Last 5 Orders') ?></h4></div>
<fieldset class="np"><?php echo $this->getChildHtml('lastOrders'); ?></fieldset>
</div>
<div class="entry-edit">
<div class="entry-edit-head"><h4><?php echo $this->__('Last 5 Search Terms') ?></h4></div>
<fieldset class="np"><?php echo $this->getChildHtml('lastSearches'); ?></fieldset>
</div>
<div class="entry-edit">
<div class="entry-edit-head"><h4><?php echo $this->__('Top 5 Search Terms') ?></h4></div>
<fieldset class="np"><?php echo $this->getChildHtml('topSearches'); ?></fieldset>
</div>
</td>
<td>
<div class="entry-edit" style="border:1px solid #ccc;">
<?php echo $this->getChildHtml('diagrams') ?>
<?php if (is_array($this->getChild('diagrams')->getTabsIds())) : ?>
<div id="diagram_tab_content"></div>
<?php endif; ?>
<div style="margin:20px;">
<?php echo $this->getChildHtml('totals') ?>
</div>
<div style="margin:20px;">
<?php echo $this->getChildHtml('grids') ?>
<div id="grid_tab_content"></div>
</div>
</div>
</td>
</tr>
</table>
</div>
Если бы я делал это в моем собственном магазине, я полагаю, что я мог бы достичь этого относительно легко путем редактирования базы Magento шаблон приборной панели index.phtml выше, добавить то, что мне нужно, чтобы мой блок визуализации, что-то вроде:
<div class="entry-edit">
<div class="entry-edit-head">
<h4><?php echo $this->__('Top 5 Search Terms') ?></h4></div>
<fieldset class="np"><?php echo $this->getChildHtml('myDashboardBox'); ?></fieldset>
</div>
</div>
Но это не мой собственный магазин, так что это не очень похоже на вариант.
Теперь, после того, как некоторые думали, что мои варианты, как представляется, следующим образом (обратите внимание, что большинство из них, кажется, «плохо», а не то, что я был бы очень горд тем, что видели в обществе):
0) Что-то очевидно, что я не вижу, что вы скажете, что это идеальное/правильное решение.
1) Могу (может быть?) уметь добавлять свой пользовательский блок внутри одного из этих других блоков в этой области ("topSearches "," sales "и т. д.) и сделать мой блок. Это не кажется очень «чистым»
2) Возможно, у меня есть блок, сделанный где-то еще на странице панели инструментов, а затем переместите его с помощью javascript в нужное место. Это было бы довольно легко, я предполагаю, но по понятным причинам чувствую себя очень «взломанным».
Есть ли у кого-нибудь отзывы о том, как это сделать, или ЕСЛИ есть способ? Имейте в виду, что я снова хочу опубликовать этот модуль, поэтому моя цель - сделать хорошую работу и сделать как можно меньше «взлома».
Спасибо вам большое за чтение!
Я искал 0) решение уже довольно давно, но не повезло. Лучший метод, который я придумал до сих пор, - это наблюдать за рендерингом html, но он включает 'str_replace()', который никогда не выглядит очень чистым. Если вам интересно, я могу объяснить, как я это делаю. – OSdave
Эй, спасибо за ответ OSdave! Я думаю, что могу представить, как может работать метод str_replace, но я бы, вероятно, включил это, поскольку мои другие решения были (очевидно) несколько «хакерскими». В настоящее время (и я потратил всего несколько часов на это, пытаясь понять это) мое личное лучшее решение, вероятно, является решением JS, просто потому, что у большинства людей будет JS, и я мог бы сделать поле в другом месте и иметь его выглядит нормально в случае, если JS не работает по какой-либо причине, но если он перемещает его туда, где он должен быть. Я надеюсь, что кто-то еще откроет мне глаза;) –