PrestaShop 격자에 추가 열 표시

8745 단어 tutorialprestashopphp
이 글은PrestaShop 1.7.7 및 이상 버전에 관한 것입니다.
PrestaShop의 주문 목록에는 그것들에 대한 정보가 많다.그러나 부족한 정보 하나는 선택한 운영자의 이름이다.
이 문서에서는 제가 이 곳에서 발표한 모듈을 소개합니다.
https://github.com/kpodemski/kporderlistcarrier
이 모듈에서는 운송업체 이름을 주문 목록에 추가하고 해당 이름을 기준으로 필터링할 수 있습니다.전체 내용은 Hook 에 기초를 두고 있으며,PrestaShop 표준에서 사용할 수 있지만, 이 페이지의 Symfony 버전에만 적용됩니다.이 모듈이 PrestaShop 1.7.7+에만 적용되는 이유

작업 원리.메쉬 어셈블리


PrestaShop의 Symfony로 이전된 페이지에서 데이터베이스에서 가져온 모든 요소 목록에 새 구성 요소가 사용됩니다. Grid
이 구성 요소는 HelperList와 유사하며, 이전 버전의 PrestaShop에서 알 수 있습니다.HelperList는 여전히 핵심에 존재하지만, 격자 같은 현대적인 대체 방법을 원할 수도 있습니다.
이 구성 요소를 사용하면 데이터베이스에서 온 요소와 같은 요소 목록을 보여 줍니다.검색, 정렬을 위한 옵션을 추가할 것입니다. 기록에 대한 각종 조작, 삭제, 편집 또는 기타를 사용할 수 있습니다.우리도 스스로 그것들을 정의할 수 있다.
이 구성 요소에 대한 자세한 정보는 PrestaShop 개발자 문서에서 찾을 수 있으며, 사용 예시, 기본 데이터 형식, 그리고 이 구성 요소에 대한 더 많은 정보를 찾을 수 있습니다.

샘플 모듈


위에서 링크한 해결 방안은 모듈 내부에서 이 구성 요소가 만든 목록을 직접 수정하는 기능을 사용했습니다.보시다시피 나는 두 개의 갈고리를 연결했다.
/** @var array */
public const MODULE_HOOKS = [
    'actionOrderGridDefinitionModifier',
    'actionOrderGridQueryBuilderModifier',
];
이 갈고리들의 명칭은 동적이다.order 목록이 아니라customer로order를 교체해서customer 목록에 연결하기를 원할 수도 있습니다.파일에서 다음 갈고리를 실행하는 다른 예시를 찾을 수 있습니다. /src/Core/Grid/GridFactory.php
/**
 * {@inheritdoc}
 */
public function getGrid(SearchCriteriaInterface $searchCriteria)
{
    $definition = $this->definitionFactory->getDefinition();
    $data = $this->dataFactory->getData($searchCriteria);

    // Here it is, hook that will modify the Grid data
    $this->hookDispatcher->dispatchWithParameters('action' . Container::camelize($definition->getId()) . 'GridDataModifier', [
        'data' => &$data,
    ]);

    $filterForm = $this->filterFormFactory->create($definition);
    $filterForm->setData($searchCriteria->getFilters());
    return new Grid(
        $definition,
        $data,
        $searchCriteria,
        $filterForm
    );
}
갈고리 이름은 다음과 같이 생성됩니다.action<Identifier of a given component>GridDataModifier .
식별자는 다음과 같습니다.const GRID_ID = 'customer';이것const의 정의는 다음과 같다. /src/Core/Grid/Definition/Factory/CustomerGridDefinitionFactory.php일단 우리가 내부 핵의 적당한 위치에 연결하면 우리는 코드를 실행할 수 있다.일반적으로 주어진 갈고리를 실현할 때, 우리는 선택한 구성 요소를 수정할 수 있도록 $params 수조에서 적당한 '도구' 를 찾을 수 있습니다.hookActionOrderGridDefinitionModifier의 예에서 우리는 격자 구성 요소 정의에 접근할 수 있다. 이것은 GridDefinitionInterface 실현된 뒤에 숨겨져 있다.
코드의 $definition 변수를 사용하면 우리는 목록의 열을 조작할 수 있다.예시 모듈에 carrier_name열을 추가했는데 지불열 뒤에 표시됩니다.우리는 어떻게 '지불 명칭' 열이 '지불' 이라는 것을 알 수 있습니까?예를 들어, Chrome 브라우저의 개발자 도구를 사용할 수 있습니다.

다음에 우리는 이 열에 필터를 분배하여 우리가 찾고 있는 운송업체와 함께 선적해야 할 주문서를 찾을 수 있도록 합니다.
$filters = $definition->getFilters();
$filters->add((new Filter(static::CARRIER_FIELD_NAME, TextType::class))
    ->setTypeOptions([
        'required' => false,
    ])
    ->setAssociatedColumn(static::CARRIER_FIELD_NAME)
);
운영자 이름을 검색할 수 있는 코드는 좀 복잡하지만 원리는 같다.우리는 주어진 목록의 정보 검색을 수정하고 우리가 필요로 하는 일을 하기 위해 $params 파라미터를 받았다.
격자 구성 요소는 데이터베이스에 남겨진 코드를 사용하지 않지만 명령 코드$params['search_query_builder']QueryBuilder의 명령 실례이다.addSelect 방법에서 우리는...예, 검색할 필드를 추가합니다.이것은 현재 PrestaShop core에서 얻을 수 있는 DbQuery 클래스와 매우 비슷합니다.
코드의 이 점에 있어서 당신은 곤혹스러울 수 있습니다.
$queryBuilder->addSelect(
    'IF(carrier.name = "0", "'.Configuration::get('PS_SHOP_NAME').'", carrier.name) carrier_name'
);
우리는 기록이 '0' 이 아닌지 검사한다.우리가 이렇게 하는 것은 운송업체를 선택할 때PrestaShop이 '0' 으로 설정되기 때문에 설치 프로그램에서 기본적으로 '매장 출하' 로 추가됩니다.이것은 과거에 남겨진 문제로 8.0판에서 해결해야 한다🙂
다음 코드 세션에서, 우리는 이미 검색 조건에 의존했다.이 코드를 통해 우리는 목록을 어떻게 정렬하는지 제어할 수 있고 그것을 필터할 수 있다.
이미 actionSomethingListingFieldsModifier 등 갈고리를 사용한 개발자에게는 전체 과정이 비슷할 수 있다.물론 사실은 그렇다.

고급 메쉬 사용


물론, 내가 제시한 예시 모듈은 격자 구성 요소를 어떻게 수정하는지 가장 간단한 예시이다.격자는 매우 유연한 메커니즘으로 사용자가 자신의 각종 대규모 조작의 실현을 추가할 수 있으며 이러한 조작은 기록에서 실행할 수 있다.출력 데이터를 포맷할 가능성도 많다.
나는 당신이 documentation for developers을 읽고 더 많은 예제PrestaShop 모듈here을 사용하여 저장소를 검사하는 것을 권장합니다.
겸사겸사 한마디 하자면, 이것은 내가 여기에 있는 첫 번째 문장인데, 너의 피드백은 선물이 될 것이다🙏🏻

좋은 웹페이지 즐겨찾기