핵심 구성 요소에 사용자 정의 필드를 저장하는 방법


22

각 #__content 항목에 하나의 간단한 필드를 추가하려고하는데 튜토리얼을 매우 신중하게 따랐습니다. 핵심 구성 요소에 사용자 정의 필드 추가에 "contact"를 "content"로 대체했습니다. 이제 관리자 컨텐트 항목 편집 양식에 탭 / 필드를 성공적으로 포함하는 설치 가능한 플러그인이 있으며 그 성가신 "저장"기능을 제외하고는 훌륭하게 작동합니다.

저축에 대한 유일한 언급은 (다시 말해서, 연락처 대신에 내용)입니다.

추가 필드는 플러그인 디렉토리의 forms / contact.xml 파일에서로드됩니다. 이러한 필드는 name 속성이 "params"로 설정된 fields 요소에 있어야합니다. 이 속성 이름을 설정하지 않으면 필드가 관리 사이트에 나타나지만 값은 저장되지 않습니다.

이주의 사항이 있다는 사실은 Joomla가 필드가 있고 핵심 코드가 처리해야한다는 것을 알아야하지만 저장하지 않기 때문에 추가해야 할 다른 이벤트가 있는지 궁금합니다.

다음은 사용자에게 보이지 않는 간단한 필드입니다. 그럼에도 불구하고 중요하지만,이를 저장하기 위해 CCK가 필요한 곳은 없습니다.
사용자 정의 필드를 저장하지 못하는 잘못된 / 누락은 무엇입니까?

업데이트 : 사용자 정의 필드가 데이터베이스에 저장되기를 희망하면서 같은 이름으로 #__content 테이블에 열을 추가하고 운이 없었습니다.

gdp.php

class plgContentGdp extends JPlugin {
    protected $autoloadLanguage = true;
    function onContentPrepareForm($form, $data) {
        $app = JFactory::getApplication();
        $option = $app->input->get('option');
        switch($option) {
            case 'com_content':
                if ($app->isAdmin()) {
                    JForm::addFormPath(__DIR__ . '/forms');
                    $form->loadFile('content', false);
                }
                return true;
        }
        return true;
    }
}

/forms/content.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fields name="params" >
        <fieldset name="params" >
            <field
                name="content_myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

렌더링 된 HTML (라벨 제외)

<div class="tab-pane active" id="attrib-params">
    <div class="control-group ">
        <div class="controls">
            <input
                type="text"
                value=""
                id="jform_params_content_myfield"
                name="jform[params][content_myfield]"
                class=""
                aria-invalid="false"
                >
        </div>
    </div>
</div>

필드 이름 이 매개 변수로 설정 되지 않고 추가 필드 로이 동작을 본 것을 기억 합니다. 그러나 그것은 약간 추악하며 각 업그레이드 후 약간의 유지 보수가 필요합니다. 내가 이런 종류의 일을하는 것을 좋아하는 것처럼 결과를 얻으려면 대신 사용자 프로필 플러그인 접근법을 사용하는 것을 고려 했습니까?
— Riccardo Zorn

내 데이터는 사용자가 아닌 콘텐츠를위한 것입니다 ... 튜토리얼 만 연락처를위한 것입니다
— GDP

죄송합니다. onContentAfterSave 이벤트를 연결하고 저장 부분을 처리하십시오.
— Riccardo Zorn

정말 감사합니다. 나는 하루의 가장 좋은 부분을 위해 이것을 분류하려고 노력했다. Joomla 플러그인 개발에 익숙하지 않으므로 예제를 사용하여 나에게 갈 수 있습니다. 언어 문자열 파일에 대해서만 확인할 수 있습니까? 플러그인 파일이나 기존 언어 폴더와 함께 제공됩니까? 또는 중요하지 않습니까?

필자는 항상 Joomla 확장명과 같은 위치에 파일을 넣습니다 (예 :이 경우 / languages ​​폴더).
— GDP

답변:


19

AHA! 순간 - #__content은 더 이상 없습니다 params다음 조정과 구성 요소 / 테이블 작업에 플러그인 할 필요가 있으므로, 열을 attribs대신 params(V3.2의 같은 #__content으로 만 표시되는) :

  1. fields이름을 "첨부 파일"로 변경
  2. fieldset이름을 고유 한 이름으로 변경하십시오 (플러그인 이름을 사용했습니다)
  3. 컨텐츠 편집 페이지에서 탭의 언어 문자열 추가

/forms/content.xml

<form>
    <fields name="attribs" >
        <fieldset name="gdp" >
            <field
                name="myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

en-GB.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"

여기에 대해 질문 할 수 있습니까? 아니면 새로운 질문을 만들어야합니까? 이것과 관련이 있습니까? 기본적으로 기사 편집보기에 둘 이상의 탭을 추가하는 방법을 알아야합니다. forms / extra.xml을 사용하면 하나의 탭만 만들 수 있습니다. xml 파일을 필드 세트로 분할하는 몇 가지 변형을 시도했지만 운이 없습니다. 하나의 탭만
— Jonnypixel

이에 대한 새로운 질문을 작성하고 관련이있는 경우이 질문 / 답변에 대한 링크를 추가해야합니다.
— Bogowoe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.