2017-11-01 2 views
0

백엔드에 레코드 저장시 TCEmainHook processDatamap_preProcessFieldArray를 사용하고 있습니다. 나는이 레코드의 다른 필드에 따라 인라인 레코드를 만들고, 변경하고 삭제합니다. 모든 것은 aspected로 작동하지만 인라인 레코드 삭제시 오류/경고가 여전히 발생하므로 작업이 올바르게 실행됩니다. 오류는 TYPO3 7에서 발생하며 8인라인 레코드 삭제가 실행되지만 경고가 나타납니다. 권한이 없거나 존재하지 않는 페이지 수정 시도

세부 사항 : I 얻을 다음 플래시 메시지 (TYPO3 7 년 만 sys_log로 작성) 각 ​​인라인 기록에 대해 I 삭제 : 레코드를 수정하는

시도 ' foo bar '(tx_datednews_domain_model_newsrecurrence : 527)를 허락하지 않았습니다. 또는 존재하지 않는 페이지입니다.

TYPO3 8에서는 typo3/sysext/core/Classes/DataHandling/DataHandler.php 메서드에 문제가 발생할 수 있습니다. recordInfoWithPermissionCheck. 삭제 된 제한 사항이 추가되었습니다. 그것을 제거하면 모든 것이 잘됩니다. 그 아이디어는 이미 레코드가 삭제되므로 더 이상 레코드를 찾을 수 없습니다. 하지만 나는 그것을 두 번 삭제하지 않을거야.

그러나 위에서 언급했듯이 결국이 인라인 레코드의 삭제가 완벽하게 수행되었습니다.

을 삭제/인라인 레코드 제거 다음과 같은 방법으로 수행됩니다

는 관련 코드 조각이 될 수 있습니다. 이 두 라인을 바꾸는 것은 도움이되지 못했습니다. 이 중 하나만 사용하면 뉴스를 다시 열었을 때 치명적인 오류가 발생하고 newsR 레코드에서 oldRec을 제거하지 않았거나 삭제되었지만 삭제되지는 않았습니다. 그래서 나는 두 단계를 모두 수행해야한다고 확신합니다. tx_datednews_domain_model_newsrecurrence의

$this->newsRecurrenceRepository->remove($oldRec); 
$news->removeNewsRecurrence($oldRec); 

TCA :

return [ 
'ctrl' => [ 
    'title'     => 'LLL:EXT:dated_news/Resources/Private/Language/locallang_db.xlf:tx_datednews_domain_model_newsrecurrence', 
    'label'     => 'eventstart', 
    'tstamp'     => 'tstamp', 
    'crdate'     => 'crdate', 
    'cruser_id'    => 'cruser_id', 
    'default_sortby'   => 'eventstart', 
    'versioningWS'    => true, 
    'languageField'   => 'sys_language_uid', 
    'transOrigPointerField' => 'l10n_parent', 
    'transOrigDiffSourceField' => 'l10n_diffsource', 
    'delete'     => 'deleted', 
    ... 

TCA 인라인의 요소 : newsRecurrenceRepository에서

'newsrecurrence' => [ 
    'config' => [ 
     'type'    => 'inline', 
     'foreign_table'  => 'tx_datednews_domain_model_newsrecurrence', 
     'MM'    => 'tx_datednews_news_newsrecurrence_mm', 
     'foreign_field'  => 'parent_event', 
     'foreign_default_sortby' => 'eventstart DESC', 
     'maxitems'   => 9999, 
     'appearance'  => [ 
      'collapseAll'      => 1, 
      'levelLinksPosition'    => 'top', 
      'showSynchronizationLink'   => 1, 
      'showPossibleLocalizationRecords' => 1, 
      'useSortable'      => 0, 
      'showAllLocalizationLink'   => 1, 
      'enabledControls'     => [ 
       'info'  => true, 
       'new'  => false, 
       'dragdrop' => true, 
       'sort'  => false, 
       'hide'  => true, 
       'delete' => false, 
       'localize' => true, 
      ], 
     ], 
    ], 
] 

가 기본으로 QuerySettings :

$this->defaultQuerySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings'); 
$this->defaultQuerySettings->setIgnoreEnableFields(true); 
$this->defaultQuerySettings->setEnableFieldsToBeIgnored(['hidden', 'deleted']); 
$this->defaultQuerySettings->setRespectStoragePage(FALSE); 

그것은 그리 좋은 t 것 o 경고가 나타나는 이유와 그것을 없애는 방법을 이해하십시오.

+0

백엔드 사용자가 관리자 권한을 가지고 : 나는이 코드 조각 라인

$this->newsRecurrenceRepository->remove($oldRec); 

를 대체? 아니면 제한되어 있습니까? – Martin

+0

예, 제가 가진 유일한 사용자는 관리자입니다. – Falk

답변

0

해결 방법은 $ pObj로 후크에서 사용할 수있는 DataHandler 개체를 사용하는 것입니다.

대신 저장소를 사용하여 레코드를 제거하는 대신 DataHandler를 사용하여 레코드를 제거해야합니다.

$cmd = []; 
$cmd['tx_datednews_domain_model_newsrecurrence'][$oldRec->getUid()]['delete'] = true; 
$pObj->start([], $cmd); 
$pObj->process_cmdmap(); 
관련 문제