PloneArticleの利用 [Plone4.0]

インストール

$PLONE_INSTANCE : /usr/local/Plone/zinstance (Plone のインスタンス)

サーバへのインストール

バグ修正を行うためダウンロードしてインストールする。ダウンロードは http://plone.org/products/plonearticle より行える。開発用ソースディレクトリに Products.PloneArticle という名前で格納する。

# tar zxvf Products.PloneArticle-4.2.0.tar.gz
# mv Products.PloneArticle-4.2.0 $PLONE_INSTANCE/src/Products.PloneArticle

次にインスタンス内の buildout.cfg を設定する。

  eggs =
      Plone
       :
+     Products.PloneArticle==4.2.0

  develop =
       :
+     src/Products.PloneArticle

最後に設定を反映する。

# bin/buildout
# bin/plonectl stop; bin/plonectl start

日本語化

日本語化はされていないため下記のファイルを Products.PloneArticle/Products/PloneArticle/i18n フォルダに追加する。また元からあった po ファイルはコンパイルエラーが出るため一旦全て削除する。

次に mo ファイルを更新する。

# msgfmt -o plonearticle-ja.mo plonearticle-ja.po

Zope を再起動すると反映される。

バグ修正

  • ダウンロード時の文字化け修正

日本語名のファイルをIEでダウンロードすると文字化けする点を修正する。proxy/fileinnercontent.py を編集する。

+ from urllib import quote
+ useragent =  REQUEST['HTTP_USER_AGENT']
+ MSIE = useragent.find('MSIE')
+ filename = data.filename or self.getId()
+ if MSIE >= 0:
+     filename=quote(filename)

  RESPONSE.setHeader(
      'Content-Disposition',
-     '%s; filename="%s"' % (content_dispo, data.filename or self.getId()))
+     '%s; filename="%s"' % (content_dispo, filename))

 

  • 編集時にページ移動ダイアログが出る点を修正

編集時にページ移動ダイアログが出てしまう点を修正する。skins/plonearticle/pa_baseinnercontentwidget.js を編集する。

- // temp hack of stupid formTabs threshold for plone 3.1
- buildTabs31X = function(container, legends) {
-     var threshold = 10;
-     var tab_ids = [];
-     var panel_ids = [];

-     legends.each(function(i) {
-         tab_ids[i] = '#' + this.id;
-         panel_ids[i] = tab_ids[i].replace(/^#fieldsetlegend-/, "#fieldset-");
-     });

-     if (legends.length > threshold) {
-         var handler = ploneFormTabbing._toggleFactory(
-             container, tab_ids.join(','), panel_ids.join(','));

-         var tabs = document.createElement("select");
-         var tabtype = 'option';
-         jq(tabs).change(handler).addClass('noUnloadProtection');
-     } else {
-         var tabs = document.createElement("ul");
-         var tabtype = 'li';
-     }
-     jq(tabs).addClass('formTabs');

-     legends.each(function() {
-         var tab = document.createElement(tabtype);
-         jq(tab).addClass('formTab');
- 
-         if (legends.length > threshold) {
-             jq(tab).text(jq(this).text());
-             tab.id = this.id;
-             tab.value = '#' + this.id;
-         } else {
-             var a = document.createElement("a");
-             a.id = this.id;
-             a.href = "#" + this.id;
-             jq(a).click(handler);
-             var span = document.createElement("span");
-             jq(span).text(jq(this).text());
-             a.appendChild(span);
-             tab.appendChild(a);
-         }
-         tabs.appendChild(tab);
-         jq(this).remove();
-     });

-     jq(tabs).children(':first').addClass('firstFormTab');
-     jq(tabs).children(':last').addClass('lastFormTab');
 
-     return tabs;
- };

- ploneFormTabbing._buildTabs = buildTabs31X ;

 

  • ファイルアップロード時にタイトル未入力であれば元のファイル名をタイトルとする

Products.PloneArticle/Products/PloneArticle/skins/plonearticle/pa_innerfile_upload.py を編集する。

+ new_file_title = test(new_file_title, new_file_title, new_file.filename.split('\\')[-1])

  return context.pa_innercontent_upload(

 

  • 画像アップロード時にタイトル未入力であれば元のファイル名をタイトルとする

Products.PloneArticle/Products/PloneArticle/skins/plonearticle/pa_innerimage_upload.py を編集する。

+ new_file_title = test(new_file_title, new_file_title, new_file.filename.split('\\')[-1])

  return context.pa_innercontent_upload(

 

  • https経由でアップロードできないバグを修正

https経由でアップロードができない点を修正する。Products/PloneArticle/skins/plonearticle/pa_baseinnercontentwidget.js を編集する。

- var limenu = jQuery(this).parent();
+ var limenu = jQuery(this).parent().parent();

 

設定

Ploneへのインストール

次に Plone に管理者でログインし、「サイト設定→プロダクトを追加・削除」より PloneArticle をインストールする。

Article編集ページから Files, Images, Links タブを隠す

機能しないためCSSで隠しておく。

/* Files, Images, Links を隠す */
#fieldsetlegend-files,
#fieldsetlegend-images,
#fieldsetlegend-links { display: none !important; }

表示形式を表示しない

利用しないためメニューから隠しておく。

/* PloneArticle 表示形式 を隠す */
body.portaltype-plonearticle #plone-contentmenu-display { display: none !important; }

Articleの表示ページにカテゴリと期限と作成者を表示する

portal_skins/plonearticle_models/pa_model_macros をスキンフォルダにコピーして編集する。

+ <div align="right">
+ [<span tal:define="keywords context/Subject;
+                    keywords python:test(len(keywords), '/'.join(keywords) ,u'\u672a\u5206\u985e');"
+        tal:content="keywords" />], 
+ <span tal:content="python:u'\u63b2\u8f09\u671f\u9650 ' + test(here.expires() < DateTime('2499/12/31'),
+                   here.expires().strftime('%Y/%m/%d %H:%M'), u'\u306a\u3057')" />,  
+ <span tal:define="pas_member context/@@pas_member;
+                   creator here/Creator;
+                   author python:pas_member.info(creator);"
+       i18n:translate="label_by_author"
+       i18n:domain="plone">
+     <span tal:content="python:author and author['fullname'] or 'Unknown'"
+           i18n:name="author" />
+ </span>
+ </div>

  <div tal:replace="structure provider:plone.belowcontentbody" />

デフォルトの表示形式を変更

Ploneに管理者でログインし、サイト設定→PloneArticle preferences→モデル設定 より変更する。

デフォルトのモデル : Documentation model

テンプレートタブを表示しない

portal_types/PloneArticle の Actions タブで Templates で設定する。

Visible? : OFF