関連付けられたイメージを各ページオブジェクト(CMSページまたはStaticPage)に追加する機能を拡張し、対応するアップロードウィジェットをページの構成に追加するには、 OctoberCMSバックエンド?10月CMS - 関連付けられたイメージを持つページを拡張する
(また、ちょうど脇など:?どのような方法では、1つのサイトのテーマに関連するイメージを追加することができます)
関連付けられたイメージを各ページオブジェクト(CMSページまたはStaticPage)に追加する機能を拡張し、対応するアップロードウィジェットをページの構成に追加するには、 OctoberCMSバックエンド?10月CMS - 関連付けられたイメージを持つページを拡張する
(また、ちょうど脇など:?どのような方法では、1つのサイトのテーマに関連するイメージを追加することができます)
)ページに正しい画像のURLを取得するには{{ ... | media }}
小枝フィルタを必要としますthis.page.image_fileから入手可能です。小枝の値
これは私がこの他に使ったように '' '$ form-> config-> model'''の代わりに' '$ widget-> model'''を使うより"標準的な "方法かもしれません回答。 (以前のプラグインのコードでは表示されているように、 '' '$ form-> config-> model''という方法は廃止されていると思います)。しかし、2つ?何も思いつきません。 – trollkotze
華麗です - ありがとうございます。しかし、小さなタイプのimage_filet(?)と思われますが、これは本当にうまくいきます! – user3767977
フロントエンド上の画像(またはファイル)を添付するには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() }}
バックエンド - >フロントエンドテーマ - >カスタマイズに移動して画像をアップロードすることができます
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ファイルに依存関係を注入することを忘れないでください:
素早い答え! CMSページでもこのようなことをするために、プラグインを通してコアを拡張するのは難しいでしょうか?うーん、私は試してみるよ... ([10月CMSスタックエクスチェンジセクションの提案](http://area51.stackexchange.com/proposals/97119/octobercms/)をサポートしてください。ここではチャンスを取っている...) – trollkotze
非常に有用な答え、ありがとう。 – user3767977
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ページの場合
詳細な回答ありがとうございます! – user3767977
広範囲で特定の回答の範囲に対応するために質問が編集された後、もうこれを保留する必要はありません。すべての可能性のあるケースは、すでに「カノニカル」な方法でカバーされていると思いますが、これはちょっとしたリファレンスQ&Aです。 乾杯。 – trollkotze