2016-12-08 4 views
2

関連付けられたイメージを各ページオブジェクト(CMSページまたはStaticPage)に追加する機能を拡張し、対応するアップロードウィジェットをページの構成に追加するには、 OctoberCMSバックエンド?10月CMS - 関連付けられたイメージを持つページを拡張する

(また、ちょうど脇など:?どのような方法では、1つのサイトのテーマに関連するイメージを追加することができます)

+0

広範囲で特定の回答の範囲に対応するために質問が編集された後、もうこれを保留する必要はありません。すべての可能性のあるケースは、すでに「カノニカル」な方法でカバーされていると思いますが、これはちょっとしたリファレンスQ&Aです。 乾杯。 – trollkotze

答えて

2

)ページに正しい画像のURLを取得するには{{ ... | media }}小枝フィルタを必要としますthis.page.image_fileから入手可能です。小枝の値

+0

これは私がこの他に使ったように '' '$ form-> config-> model'''の代わりに' '$ widget-> model'''を使うより"標準的な "方法かもしれません回答。 (以前のプラグインのコードでは表示されているように、 '' '$ form-> config-> model''という方法は廃止されていると思います)。しかし、2つ?何も思いつきません。 – trollkotze

+0

華麗です - ありがとうございます。しかし、小さなタイプのimage_filet(?)と思われますが、これは本当にうまくいきます! – user3767977

1

フロントエンド上の画像(またはファイル)を添付するには2つの方法があります。

1つは、プラグインに入れる必要があるOctoberCMSのドキュメントにある添付システムを使用することです。あなたはこの方法を望まないと思います。

もう1つの方法は、フロントエンドのテーマカスタマイズフォームで行うことです。

単にあなたのOctoberCMSテーマにファイルtheme.yamlがありますし、あなたがそれにこのコードを追加することができます。

name: '' 
description: '' 
author: 'Ahmed Essam' 
homepage: '' 
code: my_theme 
name: 'My Theme' 
form: 
    fields: 
     my_image: 
      type: fileupload 
      mode: image 
      label: Upload my image 

だから、どこでも、あなたのフロントエンドのテーマであなたが呼び出すことで、この画像にアクセスすることができます。

{{ this.theme.my_image.getPath() }} 

バックエンド - >フロントエンドテーマ - >カスタマイズに移動して画像をアップロードすることができます

1

Rainlabのを拡張しようとしていますかまたはCMSページ?

スタティックページプラグインの場合、スタティックページの設定セクションにタブを追加するには、Rainlabのページプラグインを拡張するプラグインを作成し、extendFields関数を使用してタブ付きフィールドを追加する必要があります。拡張の例を次に示します。このコードは、プラグインのPlugin.phpファイルに配置する必要があります。

レイアウト・ファイル、パーシャルか、このコードで画像を表示することができるCMSのページで次に
public function boot() 
{ 
    Event::listen('backend.form.extendFields', function($widget) { 

     $objectPath = trim(Request::input('objectPath')); 

     if (
      !$widget->getController() instanceof \RainLab\Pages\Controllers\Index || 
      !$widget->model instanceof \RainLab\Pages\Classes\Page 
     ) { 
      return; 
     } 

     $widget->addTabFields([ 
      'viewBag[image_file]' => [ 
       'label' => 'Attach image to this page', 
       'tab' => 'Image', 
       'field' => 'viewBag[image_file]', 
       'type' => 'mediafinder', 
       'comment' => 'Image url is available via the viewBag with the name of image_file' 
      ] 
     ]); 
    }); 
} 

<img src="{{ staticPage.extraData['image_file']|_media }}"> 

そして、あなたのPlugin.phpファイルに依存関係を注入することを忘れないでください:

+0

素早い答え! CMSページでもこのようなことをするために、プラグインを通してコアを拡張するのは難しいでしょうか?うーん、私は試してみるよ... ([10月CMSスタックエクスチェンジセクションの提案](http://area51.stackexchange.com/proposals/97119/octobercms/)をサポートしてください。ここではチャンスを取っている...) – trollkotze

+0

非常に有用な答え、ありがとう。 – user3767977

0

adding an associated image to your themeまたはadding an associated image to a StaticPageの正式な回答が得られたら、残りのケースをに追加して、関連する画像を追加しますeをCMSページに追加する:

php artisan create:plugin yourname.nameofyourpluginを10月のアプリディレクトリで実行してプラグインを作成します。

ファイルを編集し{% october app root %}/plugins/yourname/nameofyourplugin/Plugin.php、プラグインのboot()メソッドに次を追加:

public function boot() 
{ 
    Event::listen('backend.form.extendFields', function($form) { 
     if (get_class($form->config->model) == 'Cms\Classes\Page') 
     { 
      $form->addFields([ 
        'settings[associated_image]' => [ 
         'label' => 'Associated image for this page', 
         'type' => 'mediafinder', 
         'mode' => 'image', 
         'span' => 'auto', 
         'comment' => 'na logo alter', 
        ] 
      ]); 
     } 
    }); 
} 

そして、あなたが行われています。

(編集:おそらくより標準的な方法についてはthis答えを参照してください。それがモデルクラスの属性にアクセスする$form->config->model方法は推奨されていることもあり、私はからこれを適応しているとして、それは、$widget->modelを使用することが流行エン今以上です。やや古めかしいコードですが、技術的な違いについては分からないので、これを代替として残しておきます。)

これで、関連する画像を標準のCMSページに追加するウィジェットが見つかりました。

これにassociated_imageフィールドを追加する、{% october app root %}/cms/classes/page/fields.yamlに見出さ、Cms\Classes\Pageクラスに関連付けられたフィールドを拡張します。このフィールドをsettings配列に含める(つまり、新しいフォームフィールドにはフィールド名settings[associated_image]を選択します)、ページテンプレートのconfig sectionにこのフィールドを設定できるようにします(先頭に行associated_image = "/path/to/my/cool/image.jpg"を追加します)。その後、小枝で{{ page.associated_image }}を書き込むことによって、すなわちpageオブジェクトを通じて、小枝でアクセス可能。

それでは、どのCMSのページに関連するイメージを追加した後、あなたは(画像が最初に存在するかどうかを確認したり{% if (page.associated_image | length) > 0 %}<img src="{{ page.associated_image | media}}">{% endif %}<img src="{{ page.associated_image | media}}">ようなものを入れることができますあなたのページに追加した画像を含めるようにしてください。

(ここでは、フォームウィジェットをtアップロードした画像のパスを{% october app root %}/storage/mediaディレクトリに保存して保存します。

public function register() 
{ 
    Event::listen('backend.form.extendFields', function($widget) { 
     if (!$widget->model instanceof \Cms\Classes\Page) return; 

     $widget->addTabFields([ 
      'settings[image_filet]' => [ 
       'label' => 'Page image', 
       'tab' => 'Image', 
       'field' => 'settings[image_file]', 
       'type' => 'mediafinder', 
       'comment' => 'Image url is available via the page settings under the name of image_file' 
      ], 
     ], 'primary'); 
    }); 
} 

、値は次のとおりです。だから私たちはあなたのPlugin.phpファイルにレジスタ()メソッドを追加し、CMSページの場合

+0

詳細な回答ありがとうございます! – user3767977

関連する問題