Utworzyłem niestandardowy moduł do wyświetlania niestandardowej karty w formularzu produktu w zapleczu. Użyłem tego rozwiązania.
Teraz na karcie dodaję pola niestandardowe, aby zapisać w niestandardowej tabeli bazy danych. mówić<input type="text" name="my_new_field" value="123">
Utworzono również niestandardowy kontroler dla produktu administratora zapisz jak poniżej.
W etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Controller\Adminhtml\Product\Save" type="Namespace\Module\Controller\Adminhtml\Rewrite\Product\Save" />
</config>
I w Controller / Adminhtml / Rewrite / Product / Save.php
<?php
namespace Namespace\Module\Controller\Adminhtml\Rewrite\Product;
class Save extends \Magento\Catalog\Controller\Adminhtml\Product\save
{
public function execute()
{
echo "hello"; print_r($_POST); die;
return parent::execute();
}
}
Teraz w execute
funkcji oczekuję wartości POST my_new_field
. Ale nie rozumiem. Po uzyskaniu tego użyję niestandardowych zapytań, aby zapisać dane w niestandardowej tabeli.
Co robię źle lub czy powinienem użyć innej metody?
Aktualizacja: 26 sierpnia.
Użyłem formularza Ajax, aby zapisać dane z karty produktu, ponieważ miałem ograniczenia czasowe. Zaakceptowałem odpowiedź @ william-oakley. Teraz, gdy @mageworx dodał w swojej odpowiedzi, że nie jest to standardowy sposób na zrobienie tego.
Chcę używać interfejsu użytkownika ze standardowego użycia w dalszym rozwoju. Moje pytanie brzmi więc, jak dodać niestandardową kartę do edycji produktu za pomocą standardowego formularza interfejsu użytkownika i zapisać niestandardowe pola w niestandardowej tabeli lub w inny sposób.
źródło
Odpowiedzi:
Możesz po prostu użyć „pustego” pola wejściowego, wystarczy dodać następujący atrybut:
więc:
Będziesz wtedy mógł uzyskać dane POST do wprowadzenia.
źródło
Powyższe rozwiązanie nie jest w pełni poprawne. Dodajesz pole jako „nagi” element HTML, a forma produktu jest formularzem interfejsu użytkownika z własnymi osobliwościami. Specjalna klasa (
vendor/magento/module-ui/view/base/web/js/form/form.js
) jest odpowiedzialna za zbieranie pól i ich sprawdzanie poprawności po wysłaniu formularza. Ponadto klasa ta powinna pomijać pola, które nie są powiązane z tym formularzem interfejsu użytkownika lub nie sąadditional fields
podobne do wszystkich pól. Powinieneś użyć następującej nazwy, aby mieć pewność, że twoje pole zostanie wysłane do kontrolera:input type="text" name="product[my_new_field]" value="123"
Ale nie jest to całkowicie poprawne, ponieważ poprawnym rozwiązaniem nie jest odbieganie od standardów użytkowania formularzy interfejsu użytkownika i wykorzystywanie jego rodzimych elementów i komponentów. W takim przypadku nie powinieneś się o to martwić, ponieważ wszystko zostanie przetworzone automatycznie.
Możesz sprawdzić główną metodę przechowywania danych formularzy interfejsu użytkownika, aby zrozumieć proces:
Jak widać z tego kodu, formularz HTML ze wszystkimi jego polami nie jest wysyłany. Jednak
this.source
ithis.additionalFields
są wysyłane ale twój element nie jest zawarty w niej, ponieważ jest zadeklarowana niepoprawnie.AKTUALIZACJA OD 08.23.2016
Oto przykład, jak dodać zestaw pól z naszego bloga. Możesz przeczytać cały artykuł, korzystając z linku poniżej:
Źródło: Łatwy sposób na dodanie zestawu pól z polami do formularza interfejsu użytkownika :
źródło
Aby zapisać pole produktu w niestandardowej tabeli, możesz postępować zgodnie z logiką ceny poziomu. Magento zaoszczędzi cenę za pomocą niestandardowego modelu zaplecza ceny za poziom. Możemy stosować tę samą logikę dla naszego niestandardowego pola / atrybutu. Aby zapisać attibute w niestandardowej tabeli, musisz utworzyć niestandardowy atrybut i podać model zaplecza. Model zaplecza będzie sprawdzał, zapisywał i przywracał atrybut. Możesz wykonać poniższe kroki.
Krok 1. Utwórz atrybut produktu
Krok 2. Utwórz model zaplecza dla niestandardowego atrybutu produktu, który pomoże w sprawdzeniu poprawności oraz zapisaniu i odzyskaniu wartości atrybutu
Krok 2. Model zasobów do zapisywania i pobierania wartości atrybutów z tabeli niestandardowej
źródło