2014-02-27 2 views
1

현재 Joomla 3.x 용으로 첫 번째 MVC 구성 요소를 개발 중입니다. 대체로 데이터베이스의 언어/번역 문제로 어려움을 겪고 있습니다.Joomla 구성 요소 데이터베이스에 번역본 저장

제 문제는 백엔드에서 생성 된 사용자 생성 콘텐츠의 번역 된 콘텐츠를 저장해야한다는 것입니다. 예를 들어, 누군가가 독일어로 새 항목을 입력하고 (데이터베이스에 저장) 다른 언어로 번역해야합니다. Joomla에서 그것을 달성하는 방법? 나는 나머지가 모두 같을 때 모든 언어마다 새 항목을 생성하고 싶지 않습니다.

나는 (강력 목적을 볼 간체) 그 구조의 테이블 "항목"을 테이블 "item_language"에 대해 생각 :

항목

id PRIMARY INT 
price DOUBLE(4,2) 

item_language

itemid PRIMARY INT 
language PRIMARY CHAR(5) 
name VARCHAR(50) 

item_language 나는 diffe를 저장하고 싶습니다. 번역 된 버전을 빌려주십시오. language 필드에는 언어를 식별하는 지역 코드 (예 : de-DE)가 있습니다.

내 문제 :

  • 방법 백엔드에서 다른 (번역) 버전을 표시하려면?
  • 이것이 올바른 데이터베이스 모델입니까?

도움을 주시면 감사하겠습니다.

답변

0

내가 필요한 것을 처리 할 방법을 찾았습니다.
감사합니다. 올바른 방향으로 나를 안내 해주는 Valentin Despa :-).

  • 정상으로 models/forms/site.xml의 폼 필드를 정의 - 여기서

    전체 공정은 (검증과 정확한 단계는 생략 단순화).
  • views/site/tmpl/edit.php에서 자체 코딩 된 자바 스크립트 (jQuery 기반)를 추가하면 데이터베이스에 JSON으로 저장된 여러 언어의 콘텐츠가있는 입력란을 처리 할 수 ​​있습니다.
    • 정의 된 언어에 대한 특별 버전을 표시하려면 원래 양식 요소를 복제하고 필요한 속성 (ID, 이름, ...)을 수정하십시오. 컨텐츠 - 원본 필드 컨텐츠 및 표시에서 필요한 언어에 대한 JSON을 추출합니다.
    • Javascript로 원래 필드를 숨기고 DOM에 맞춤 버전을 추가하십시오.
  • 나중에 에서 동적으로 생성 된 콘텐츠를 JInput으로 읽고 JSON을 생성하고 데이터베이스에 저장하여 원래 필드를 구성합니다.

예상대로 작동합니다.

1

정말 Joomla의 첫 번째 구성 요소에 대한 좋은 작업을 발견했습니다!

오히려 일반 의사 대답은 :

  • 데이터베이스 모델은 바로 보인다. JSON에서 언어 데이터를 인코딩 할 수도 있지만 나중에 쿼리 작업을 수행하기가 어려울 수 있습니다. 이렇게하면 하나의 테이블 만 사용할 수 있습니다.

  • JTable이 실제로는 단일 테이블을 조작하도록 설계된만큼 (데이터를 조작하기 위해 JModel/JTable을 사용하는 경우) 내가 아는 한 직접적으로이를 수행 할 수 없습니다.

당신이 할 수있는 일 : 편집을 위해

  • : (사용자가보고 많은 관계로이 일을 편집하는)이 데이터를 게시하는 그래픽이를 표현하는 방법을 알아낼 (언어 텍스트를 배열로) JModel에 전달합니다. 이 모델에서는 JTable을 사용하여 원하는 관계를 유지하고 데이터를 저장할 수 있습니다.

  • 보기 (편집하지 않음)는 문제가 아니어야하며 간단한 JOIN이됩니다.

github에서 기본 구성 요소를 만들려면 JModel/JTable을 사용하십시오.

+0

답변 해 주셔서 감사합니다. JForm에서 가장 좋은 표현 방법이 무엇인지 궁금합니다. 선호되는 방법은 다른 언어에서 추측 할 수있는 사용자 정의 JFormField 구현입니다. 뭔가 제안 할 수 있니? :-) 목록에 올바른 버전을 읽고 표시하는 것은 문제가되지 않습니다. 다른 버전으로 항목을 작성/편집하기위한 양식에 대해 궁금합니다. 감사! – thedom

+1

필요한 것을 수행하는 일반적인 JavaScript/jQuery 솔루션을 찾아보십시오. 독립 실행 형으로 작동하게하고 JFormField를 사용하여 작업을 수행하십시오. –