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


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.