Po utworzeniu niestandardowego atrybutu, który rozszerza typ atrybutu podstawowego, użyjmy tego atrybutu i dodamy do niego niestandardowe ustawienia i dane. Gdy już to opanujesz, będziesz w stanie stworzyć dowolny typ atrybutu
Atrybut Location Property z naszego poprzedniego przykładu pozwala nam wybrać lokalizację właściwości dla danej strony. Rozszerzmy go tak, aby zrobił jeszcze kilka rzeczy:
1. Dodając atrybut, możemy zdecydować, czy wyświetlić listę opcji jako menu wyboru, czy jako serię przycisków opcji.
2. Zapisując atrybut, wybierzmy, czy mamy zezwolić na niestandardową etykietę tekstową dla zapisanej lokalizacji. Jeśli tak, użyjemy tej etykiety tekstowej podczas wyświetlania atrybutu (o co będziemy martwić się w kolejnym dokumencie).
Te modyfikacje będą wymagać kilku zmian w atrybucie.
1. Będziemy musieli zmodyfikować kontroler atrybutów, aby nie dziedziczył z klasy Concrete\Attribute\Number\Controller
ponieważ nie przechowuje już wartości danych w obiektach Concrete\Core\Entity\Attribute\Value\Value\NumberValue
(i zamiast tego będzie udostępniać własne obiekty wartości danych.)
2. Będziemy musieli dodać niestandardową etykietę do obiektu PropCo\Property\Location, ponieważ będziemy jej potrzebować w naszym niestandardowym obiekcie.
3. Będziemy musieli dodać nową jednostkę ustawień, aby zapisać, czy utworzony klucz atrybutu będzie wyprowadzany jako lista wyboru lub jako lista przycisków opcji.
4. Będziemy musieli dodać nowy obiekt wartości danych, który przechowuje zarówno wybrany identyfikator lokalizacji, jak i niestandardową etykietę, jeśli istnieje.
Może to zabrzmieć jak dużo pracy, ale system atrybutów concrete5 sprawia, że możesz łatwo dodawać te obiekty, a my nawet musimy zapisywać zapytania do bazy danych, aby przechowywać dane.
Zmodyfikuj kontroler
Najpierw zmień kontroler, aby dziedziczył z domyślnego kontrolera podstawowego. Tak:
class Controller extends \Concrete\Attribute\Number\Controller
staje się tym
use Concrete\Core\Attribute\Controller as AttributeController; class Controller extends AttributeController
Następnie dodajmy do tego kontrolera atrybutu indeksowanie wyszukiwania liczby całkowitej:
protected $searchIndexFieldDefinition = array('type' => 'integer', 'options' => array('default' => 0, 'notnull' => false));
(Nie martw się o to, jak to jeszcze działa, jest osobny dokument do tego celu)