スポンサーリンク

【pleasanter】スクリプトでhtmlの追加 リンクやボタンを編集画面に表示する ~実践例あり~

プリザンター
スポンサーリンク
※当サイトは広告を含みます

前回、スクリプトでテキストを追加する、というのをやりました。
【pleasanter】スクリプトでhtmlの追加 javaScriptとjQueryで書いてみた ~実践例あり~

今回は、ボタンを追加、リンクを追加、というのをやってみたいと思います。

※おことわり
2023年4月時点の情報です。プリザンターのバージョンは 1.3.20.0 です。Google Chrome でやっています。
javascript,html,cssともに初心者です。調べながら、やってみながら、きっとこうすればいいんだ!という感じで書いていますので、間違っている場合、効率的な書き方ではない可能性が大いにあります。間違ってるよ!とか、こうしたほうがいいよ!ということがありましたら、コメント等で教えていただけると大変ありがたいです。

1.編集画面で分類項目の下にリンクを追加

(1)やってみる

前回も使用した、なんということもないサイトでやってみようと思います。

分類Aの下に別のページを開くリンクを設置してみます。

管理→テーブルの管理→スクリプト で以下のコードを入力します。
「新規」「編集」にチェックを入れます。

$('#Results_ClassAField').after('<div style="clear: both; margin-left:120px;"><a href="https://mwkexcelfriend.com/pleasanter-kakutyouhtml/" target="_blank" style="color: blue; text-decoration: underline">※拡張HTMLのやり方はこちらをクリック</a><div>');

新規作成で編集画面を出してみます。分類Aの下に「※拡張HTMLのやり方はこちらをクリック」がでましたね!・・・リンクのurlはテキトウにこのサイトのとあるページを指定しています。

リンクをクリックしてみます。すると、別タブで指定したurlのページが開きました!

(2)そもそもhtmlでリンクを作成するにはどうするのか

プリザンターのスクリプトの前に。そもそもこうゆうクリックすると別のページが開くリンクってどうやってやるの?から始めました。

aタグ、というのを使うそうです。こちらのサイトで勉強させていただきました。
https://blog.codecamp.jp/programming-html-a

<a href=”ここにURL”>ここは青字にしたいテキスト</a>

aタグ(アンカータグ)のhref属性にurlを入力し、aタグで挟んだ文字列が青字の下線で表示され、クリックすると指定したurlが開きます。今回はyahooトップぺージを指定しています。

このままだと、同じウインドウが差し替わってあたらしいページが開きます。別タブで開きたいときは target=”_blank” をaタグ内に入れると、別タブで開くとのこと!

以下のコードをメモ帳などに入力し、拡張子.htmlで保存し、ブラウザにドラッグして開いてみます。

<a href="https://www.yahoo.co.jp/" target="_blank">ここをクリック</a>

ここをクリック をクリックすると、ヤフーが別のタブで開きます。

(3)コードの解説

さて、上記を踏まえて、(1)のコードの解説です。

$('#Results_ClassAField').after('<div style="clear: both; margin-left:120px;"><a href="https://mwkexcelfriend.com/pleasanter-kakutyouhtml/" target="_blank" style="color: blue; text-decoration: underline">※拡張HTMLのやり方はこちらをクリック</a><div>');

$(‘#Results_ClassAField’).after(・・・)

前回やりました。jQueryで記述しています。分類Aのフィールドの後ろにhtmlを挿入します、というコードです。プリザンターでのjQueryでのhtmlの挿入のやり方は、前回の記事を参考にしてください。

次にカッコ内の挿入したいhtmlの解説です。
リンクはaタグですが、aタグをdivタグで包んでいます。
なぜそうしたかというと。。。分類Aの下に出したかったのに、以下のようにaタグだけでやったら、ページの上の方に行ってしまったからです。

//NGだった記述例
$('#Results_ClassAField').after('<a href="https://mwkexcelfriend.com/pleasanter-kakutyouhtml/" target="_blank" style="clear: both; color: blue; text-decoration: underline">※拡張HTMLのやり方はこちらをクリック</a>');

divタグのstyleで clear: both; (回り込みしない)と、margin-left:120px; で左に余白を入れています。
なお、float:left で要素の右に表示するのであればaタグだけでも大丈夫でした。

aタグの中では href属性に遷移したいページのurlを入力しています。
target=”_blank” で別タブで開くようにしています。
そのままだと青字、下線が付かなかったので、styleで無理やりに青字・下線としています。
style=”color: blue; text-decoration: underline

<a>と</a>の間に表示したい文字列を入力しています。

(4)同じことを拡張HTMLでやってみる

拡張HTMLでも同じことができます。
エディタの分類Aの拡張HTMLの「フィールドの後」にコードの<div>以降</div>までをコピーして貼り付けします。

すると、同じ表示になりました!常に表示する場合は、こちらのほうがいいですね。

2.編集画面で分類項目の横にボタンを追加

(1)ボタンを表示する

さて、次にボタンを表示、をやってみます。

公式サイトのこちら
FAQ:サンプルコード:フォームにボタンを追加したい

HTMLのボタン(buttonタグ)の使い方
を参考とさせていただきました。

ボタンはbuttonタグを使うとボタンになります!

分類Aの横にボタンを表示し、ボタンをクリックすると「こんにちわ!」とアラートが表示されるようにしてみます。

スクリプトに以下のコードを入力します。

$('#Results_ClassAField').after('<button type="button" onclick="fn1()" id="btn1" style="float: left;">ボタンですよ</button>')
    
function fn1() { alert("こんにちわ!"); }

新規作成で編集画面を出してみます。ボタンが表示されていますね!

「ボタンですよ」ボタンをクリックしてみます。「こんにちわ!」と表示されました!

(2)コードの解説

コードをざっくり解説します。

$('#Results_ClassAField').after('<button type="button" onclick="fn1()" id="btn1" style="float: left;">ボタンですよ</button>')
    
function fn1() { alert("こんにちわ!"); }

$(‘#Results_ClassAField’).after(・・・)
こちらはさっきやった通りですね。分類Aのあとにafterの後ろのカッコ内のhtmlを挿入します。

afterの後のカッコ内
‘<button type=”button” onclick=”fn1()” id=”btn1″ style=”float: left;”>ボタンですよ</button>’

<button></button>タグで囲むことでボタンになります。
最初のbuttonタグ内に書かれているものはすべてなにかしらの属性です。

type属性:ボタンのタイプ。submit(送信)、reset(リセット)、button(その他・・・?)とあるそうで、自作のfucnction等を起動したいときはbuttonになるようです。書かなくても大丈夫みたいです。

onclick属性:onclick属性に関数を指定すると、クリックしたときにその関数が実行されます。
今回はスクリプトに書いてあるfn1関数を指定しています。

id属性:指定しなくてもいいみたいですが、なんとなく指定しておきました。スクリプトで「このボタン!」としたいときにidがあると便利そうだなあと思ったので。

style属性:おなじみstyle属性。float:leftとして、分類Aの横に来るようにしました。そのほかボタンの装飾などもできるようですが、今回はシンプルにしました。

3.スクリプトで表示するボタンの実践例

もうちょっと、現実的に使いそうな使用例にしてみます。

(1)やりたいこと

分類Aになにかしら選択するとボタンを表示。ボタンクリックでアラートに選択した選択肢の文字列を表示する。

現実的に使いそう・・・ではない。。。ま、いっか。ということでやってみます。

「分類Aになにかしら選択されている状態でボタンを表示」は分類Aが選択されたときと、分類Aが選択された状態でその文書が呼び出しされたとき(編集画面を立ち上げたとき)の二通りが考えられます。
前回もやりましたが、①②のメソッドを使用します。
①分類Aに変化があったとき → $p.on
②編集画面を起動したとき → $p.events.on_editor_load

ちなみに分類Aの選択肢は以下の設定としています。

(2)コード

以下のコードをスクリプトに入力します。

※1:2024.9.15.コード一部修正しています。

$p.events.on_editor_load = function(){ fncBtnShow(); }

$p.on('change','ClassA', function(){ fncBtnShow(); });

function fncBtnShow () {
    if ($('#Results_ClassA').val() !== '') {
        if (!$('#btn1').length) {
            $('#Results_ClassAField').after('<button type="button" onclick="fncAlt()" id="btn1" style="float: left;">ボタンですよ</button>');    
        }
    }
}

function fncAlt() {
    const value = $('#Results_ClassA option:selected').text();
    alert(value + ' が選択されました');
} 

(3)プリザンターの動き

プリザンターでの動きです。
新規作成して編集画面を表示します。分類Aの横にボタンは表示されていません。

分類Aで「東京会場」を選択しました。
すると横にボタンが表示されます。

ボタンをクリックすると「東京会場 が選択されました」とアラートが表示されます。

(4)コードの解説 ポイントは選択肢のテキストの取得

コードをザックリ解説していきます。素人が書いたものなので、これが最善かどうかは不明ですが。。。

$p.events.on_editor_load = function(){ fncBtnShow(); }

おなじみ、編集画面をロードするときにこれやって」を書くコードです。
公式マニュアルはこちら
https://pleasanter.org/manual/script-events-on-editor-load

$p.events.on_editor_load = function(){ ここに編集画面を立ち上げたときにやってほしいことを書きます }

今回は fncBtnShow() という関数を実行する、としています。
次の $p.on でも全く同じ処理を行うことにするため、関数fncBtnShowにまとめました。
fncBtnShow の処理内容については後ほど書きます。

$p.on('change','ClassA', function(){ fncBtnShow(); });

前回もやりました。$p.on です。公式マニュアルはこちら
https://pleasanter.org/manual/script-on

分類A(ClassA)に変化があったときに、functionに書かれた処理を実行します。

function fncBtnShow () {
    if ($('#Results_ClassA').val() !== '') {
        if (!$('#btn1').length) {
            $('#Results_ClassAField').after('<button type="button" onclick="fncAlt()" id="btn1" style="float: left;">ボタンですよ</button>');    
        }
    }
}

$p.events.on_editor_load と $p.on に書いている処理。自作関数 fncBtnShow です。

if ($(‘#Results_ClassA’).val() !== ” ) { 真のときに実行する処理 }
分類Aの値が空白でない場合、{}内の処理を実行します。

2024.9.15.以下のコードを追加しました。
if (!$(‘#btn1’).length) { IDbtn1がないときに実行する処理 }
これをかまさないと、選択肢を変更する都度ボタンが増えてしまうということに、後々気が付きました(汗)
ClassAが空白ではなく、すでにボタンが作成されていない場合、ボタンのhtmlを追加する処理を実行します。
$(‘#btn1’).length が、要素が存在するか確認するコードです。
jQueryで特定の要素が存在するかどうかを判別する処理【.length】
そのコードの前に ! を付けているので「存在しない」場合に{}内の処理を実行することになります。

$(‘#Results_ClassAField’).after(‘<button type=”button” onclick=”fncAlt()” id=”btn1″ style=”float: left;”>ボタンですよ</button>’);
ボタンのhtmlを挿入する処理です。
ボタンの onclick属性に関数 fncAlt を指定しています。クリックすると関数 fncAlt の処理が実行されます。

function fncAlt() {
    const value = $('#Results_ClassA option:selected').text();
    alert(value + ' が選択されました');
} 

自作関数 fncAlt です。ボタンがクリックされたときに実行されます。

キモはここ!
$(‘#Results_ClassA option:selected’).text()

丸二日悩んだ。。。
分類の選択肢を取得したい場合、
$(‘#Results_ClassA’).val()
として、値を取得するのはよくやっていた。

が、テキストを取得するのをどうするの?というのがわからなくて。
こちらのサイトでやっとやり方が分かりました。
https://www.flatflag.nir87.com/select-2-1240

分類Aのhtmlを見てみます。

$(‘#Results_ClassA’).val()
とすると、選択されたoptionの value の値が取得できます。
東京会場を選択している場合は 100 が取得できます。

$(‘#Results_ClassA option:selected’).text()
とすると、選択されたoptionのテキストが取得できます。
東京会場を選択している場合は 「東京会場」 が取得できます。

なお、選択肢を下図のように設定している場合、$(‘#Results_ClassA’).val() でそのまま「東京会場」等のテキストが取得できます。

$(‘#Results_ClassA’).val() でも $(‘#Results_ClassA option:selected’).text() でも同じ結果が得られます。
htmlを見てみるとvalue にも text にも同じ値が適用されていることが分かります。

4.まとめ 

また、使用例がグタグタになった感があります。

なお、拡張HTMLでもボタンの表示はできます。
しかし、onclickに設定する自作関数はスクリプトに用意しておかなければ、です。

下図は分類Aの拡張THMLでボタンを設定する例です。

グダグダの長文をお読みいただき、ありがとうございました。プリザンターへの理解の一助となれば幸いです。

内部リンク
↓ボタンシリーズ
【pleasanter】スクリプトでボタンを編集画面に追加する
【pleasanter】編集画面のボタンを表示したり非表示にしたりする~スタイル・スクリプトの利用~
【pleasanter】編集画面にボタンを追加の実践例~ボタン表示・非表示、日付・ユーザーのセット~
【pleasanter】編集画面のスクリプト実践例~項目の有効無効の切替、自作スクリプト内に「更新」ボタンの処理を実装する~

↓その他ボタン関連
【pleasanter】スクリプトでhtmlの追加 リンクやボタンを編集画面に表示する ~実践例あり~
【pleasanter】拡張HTML~フィールドの右(左)に追加テキストを表示、ボタンの表示

↓こちらでもボタンやセクション、項目、ラベル等いろいろ非表示にしています。
【pleasanter】いろいろ非表示にしてみた

5.参考文献

【HTML初心者向け】はじめてでもわかる!HTMLでリンクを貼るaタグの使い方!
https://blog.codecamp.jp/programming-html-a

HTML のリンクを新しいタブで開くようにする方法
https://www.freecodecamp.org/japanese/news/how-to-use-html-to-open-link-in-new-tab/

jQueryでselectタグの値やテキストを取得する
https://www.flatflag.nir87.com/select-2-1240

プリザンター公式マニュアル
FAQ:サンプルコード:フォームにボタンを追加したい
https://pleasanter.org/manual/script-events-on-editor-load
https://pleasanter.org/manual/script-on

HTMLでbuttonタグの使い方を理解しよう
https://style.potepan.com/articles/19794.html#:~:text=HTML%E3%81%AEbutton%E3%82%BF%E3%82%B0%E3%81%AE,%E3%81%93%E3%81%A8%E3%81%8C%E5%8F%AF%E8%83%BD%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82

HTMLのリンク<aタグ>の書き方を初心者向けに解説
https://saruwakakun.com/html-css/basic/a-link

コメント

タイトルとURLをコピーしました