Jak dodać przycisk niestandardowy, aby zamówić widok strony w pobliżu "Wstecz" i "Edycja"?Jak dodać nowy przycisk do widoku zamówienia w panelu administracyjnym Magento?
Odpowiedz
config.xml:
<global>
<blocks>
<adminhtml>
<rewrite>
<sales_order_view>Namespace_Module_Block_Adminhtml_Sales_Order_View</sales_order_view>
</rewrite>
</adminhtml>
</blocks>
</global>
nazw/modułu/block/Adminhtml/Sprzedaż/Order/view.php:
class Namespace_Module_Block_Adminhtml_Sales_Order_View extends Mage_Adminhtml_Block_Sales_Order_View {
public function __construct() {
parent::__construct();
$this->_addButton('button_id', array(
'label' => Mage::helper('xxx')->__('Some action'),
'onclick' => 'jsfunction(this.id)',
'class' => 'go'
), 0, 100, 'header', 'header');
}
}
Jeśli chcesz zrobić to szybko i-brudny (tj Edycja plików core), otwarte app/code/core/Mage/Adminhtml/Block/Sales/Order/View.php
i dodać coś takiego:
$this->_addButton('order_reorder', array(
'label' => Mage::helper('sales')->__('Print Labels'),
'onclick' => 'window.open(\'/printouts/' . $this->getOrder()->getRealOrderId() . '.pdf\')',
));
można umieścić, że przed tym bloku:
if ($this->_isAllowedAction('emails') && !$order->isCanceled()) {
$message = Mage::helper('sales')->__('Are you sure you want to send order email to customer?');
$this->addButton('send_notification', array(
'label' => Mage::helper('sales')->__('Send Email'),
'onclick' => "confirmSetLocation('{$message}', '{$this->getEmailUrl()}')",
));
}
Twoim wyzwaniem, jeśli zdecydujesz się zaakceptować, jest utworzenie pliku lokalnego, który jest przejęciem pliku podstawowego, i opublikowanie go tutaj!
Najgorsza odpowiedź - nie modyfikuj podstawowych plików w żadnej sytuacji. Nigdy. Łatwo. Bez pośpiechu i brudu - zachowaj czyste kodowanie! –
W nawiązaniu do powyższych uwag o rodzic :: __ konstruktor, oto co zadziałało dla mnie:
class Name_Module_Block_Adminhtml_Sales_Order_View extends Mage_Adminhtml_Block_Sales_Order_View {
public function __construct() {
$this->_addButton('testbutton', array(
'label' => Mage::helper('Sales')->__('Toms Button'),
'onclick' => 'jsfunction(this.id)',
'class' => 'go'
), 0, 100, 'header', 'header');
parent::__construct();
}
}
powinieneś zrobić coś w stylu $ return = parent :: __ construct(); na początku funkcji, rób swoje, a następnie zwróć $ return; na końcu. –
@GabrielQueirozSilva Konstruktorzy nie mają wartości zwracanych. To jest poprawna odpowiedź. –
@MatthiasKleine ops, nie zauważyłem, że to był konstruktor. –
Zamiast hacki rdzeniowych lub przepisuje, wystarczy użyć jednego obserwatora, aby dodać przycisk do zamówienia:
<adminhtml>
<events>
<adminhtml_widget_container_html_before>
<observers>
<your_module>
<class>your_module/observer</class>
<type>singleton</type>
<method>adminhtmlWidgetContainerHtmlBefore</method>
</your_module>
</observers>
</adminhtml_widget_container_html_before>
</events>
</adminhtml>
Następnie wystarczy sprawdzić w obserwatora czy typ bloku dopasowuje widok kolejności:
public function adminhtmlWidgetContainerHtmlBefore($event)
{
$block = $event->getBlock();
if ($block instanceof Mage_Adminhtml_Block_Sales_Order_View) {
$message = Mage::helper('your_module')->__('Are you sure you want to do this?');
$block->addButton('do_something_crazy', array(
'label' => Mage::helper('your_module')->__('Export Order'),
'onclick' => "confirmSetLocation('{$message}', '{$block->getUrl('*/yourmodule/crazy')}')",
'class' => 'go'
));
}
}
Funkcja "getUrl" bloku automatycznie doda bieżący identyfikator zamówienia do wywołania kontrolera.
bez przepisywania klasy, bez zmiany pliku core - niesamowite rozwiązanie, mogę potwierdzić, że działa co najmniej w 1.8 – simonthesorcerer
To jest DUŻO lepszej odpowiedzi. Odpowiedzi, które wymagają podklasy, aby zastąpić domyślne klasy Magento w ten sposób spowodują wiele problemów z konfliktami rozszerzeń i aktualizacjami niezgodności. Jeśli Magento ma metodę wykorzystującą Obserwatora, zwykle jest to podejście. –
- 1. Jak programowo importować zamówienia do Magento?
- 2. Magento: znajdź zamówienia zawierające produkt
- 3. Brak dostępu do modeli w panelu administracyjnym z DEBUG = False
- 4. Włącz Magento Varien_Profiler w obszarze administracyjnym
- 5. Magento 1.7 - Jak utworzyć link do strony edycji administratora produktu na stronie widoku zamówienia?
- 6. Jak bezpiecznie wyświetlać graficzne wykresy w panelu administracyjnym mojej witryny?
- 7. Jak dodać kontrolę użytkownika do panelu
- 8. Jak utworzyć nową stronę w panelu administracyjnym prestashop?
- 9. Jak zmienić numer początkowy zamówienia w Magento
- 10. Ustawianie opcji wyboru dynamicznie na stronie produktu katalogu w panelu administracyjnym Magento
- 11. Jak utworzyć raport w Magento
- 12. Jak dodać status zamówienia niestandardowego woocommerce?
- 13. manipulowania danymi w panelu administracyjnym Django przy zapisywaniu
- 14. Przycisk niestandardowego panelu sterowania
- 15. Jak dodać obramowanie do panelu javafx?
- 16. Pobieranie produktów z zamówienia w Magento
- 17. magento- Dodawanie dat od i do ceny poziomów w module administracyjnym
- 18. Zmiana kolejności realizacji zamówienia w Kasynie Magento
- 19. MVC4 jak dynamicznie dodać element zamówienia do pola EditorFor?
- 20. Jak dodać nowy wiersz tabeli programu ASP.NET, klikając przycisk?
- 21. Magento Dodaj metodę płatności do siatki zamówienia administratora
- 22. Usuwanie elementu z panelu administracyjnego Magento Nawigacja
- 23. Dla administratora django, w jaki sposób dodać pole do modelu użytkownika i czy można je edytować w panelu administracyjnym?
- 24. Jak dodać niestandardową weryfikację do prototypu Magento
- 25. Magento: Otrzymuj zamówienia według określonej metody płatności
- 26. Jak dodać do listy "Nowy z szablonu"?
- 27. Jak dodać nowy element do ObjectListView?
- 28. Jak dodać nowy element do haszu
- 29. Magento ręcznie zmienia status zamówienia na "kompletny"
- 30. Magento - pobierz identyfikator zamówienia z identyfikatorem przyrostowym
przykładem dla metody "onclick" jest "confirmSetLocation (" {$ message} "," {$ this-> getOkToShipUrl()} ")", –
potrzebne do wywołania parent :: __ construct(); w twojej niestandardowej funkcji __construct(), albo otrzymam wyjątek "Invalid block type". – James
@ James, masz rację, dzięki. – silex