PrestaShop 격자에 추가 열 표시
8745 단어 tutorialprestashopphp
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을 사용하여 저장소를 검사하는 것을 권장합니다.
겸사겸사 한마디 하자면, 이것은 내가 여기에 있는 첫 번째 문장인데, 너의 피드백은 선물이 될 것이다🙏🏻
Reference
이 문제에 관하여(PrestaShop 격자에 추가 열 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kpodemski/display-extra-column-in-the-prestashop-grid-157j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)