質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Markdown

Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。

Q&A

解決済

2回答

2131閲覧

Markdownエディター導入の際の画像の取り扱いについて

tete2

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Markdown

Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。

0グッド

0クリップ

投稿2020/05/01 04:36

編集2020/05/01 05:43

PHPでブログみたいのを作っていて、このteratailみたいなmarkdownを導入したいです。
特に画像の所が難しいです。
markdown自体の導入は、サンプルコードでできるのですが、
画像の挿入は、このteratailみたいな選択だけでアップロードはできません。
画像を先に入れて、画像のパスを入れて表示できる感じです。おまけに画像のサイズも調整がうまくできません。。
このteratailみたいな画像の添付の仕方はどうやったらできるのでしょうか。。。
文字の途中に何枚も画像を添付できるようにしてみたいです。
markdownの一つは以下を参考しましたが、画像がもっと自由に扱えるのであれば他でもと思っております。
http://unitopi.com/markdown-editor/

イメージとしては下記のように使えるようにしたいです。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/05/01 05:25

手書きでいいので希望する具体的なUIを図示できませんか?
tete2

2020/05/01 05:46

質問にイメージしている画像を添付してみました。
guest

回答2

0

ベストアンサー

画像の取り扱いについて / 画像の添付の仕方はどうやったら

回答は「大まかな方針」になります。

  1. codemirror/lib/codemirror.js を追いかけて、アイコンクリック時のイベントリスナを探す。
  2. 画像アイコンのクリックイベントに割り込ませるなどして、ファイル選択によるプレビュー機能/画像サイズ変更機能は、FileAPI/Canvasでの加工/Ajax+FormDataでのアップロードを自前で用意する

ご質問の内容は「エディタの個々の詳細な機能」に相当するので、個別のライブラリとしては、誰も公開していないと思いますので、コードを読んでみるのが早い(あるいは、読むしかない)と思います。


以下、コードリーディングに関する内容です。

PHPでブログみたいのを作っていて、このteratailみたいなmarkdownを導入したい

には共感するところがありました(Markdown 入力の オレオレWiki を作ろうとしています)。

SimpleMDE は私も採用予定でして、調べている最中です(以下の特徴は掴んでいます)。

  1. 拡張性の高いコード用のエディタCodeMirrror を拡張したもの。
  2. 正規表現だけで高速変換する marked.jsを採用してリアルタイムプレビュー機能を実現。

方言の拡張をしたかったので、プレビュー機能は無効化し、JsonMLベースで処理する Markdown-js を利用する方針。


エディタ実装の詳細を知るため、gitHubから zipダウンロードし、読んでいるのが、以下の内容になります。

/sparksuite-simplemde-markdown-editor/ dist/ ... minify された *.css, *.js src/ ... commented source /codemirror-5.51.0/ lib/ ... エディタのコアスクリプト mode/ ... 開発言語毎の詳細設定スクリプト

冒頭に示しましたが、codemirror/lib/codemirror.js を読むことで、詳細な変化を加えられると思います。

投稿2020/05/05 02:07

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tete2

2020/05/05 02:51

なるほど。。少し難しいですが、参考になりました! おおまかな仕組みの理解が出来てきたので、引き続き調べたいと思います。 ありがとうございます!
guest

0

画像をアップロードするなら、受け取り側がファイルで持つのか
DBに保持するのかによって処理がかわってきます。

投稿2020/05/01 05:26

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tete2

2020/05/01 05:38

DBには画像のパスだけ保存する感じで、サーバーの画像フォルダーの中に画像を入れようと思っておりました。
yambejp

2020/05/01 05:43

> サーバーの画像フォルダーの中に画像を入れよう すでにあるファイル名と競合させない方法を検討ください (たとえば元のファイル名をつかわず、タイムスタンプでファイル名をつくるとか)
yambejp

2020/05/01 05:46 編集

ちなみにプレビューはサーバーにアップロードしなくても クライアントサイドのみで見せることはできます (プレビューをアップロードするならプレビューの意味ないですから)
tete2

2020/05/01 05:48

はい、そうですね。 タイムスタンプでファイル名で良いと思います。
tete2

2020/05/01 05:54

そうですね、プレビューはサーバーアップロードなしでできると素晴らしいところです。。
yambejp

2020/05/01 06:03

とりあえずこう <?PHP print_r($_FILES); ?> <script> window.addEventListener('DOMContentLoaded', ()=>{ document.querySelector('#up').addEventListener('change',e=>{ var target=e.target; var file=target.files[0]; if(file !==undefined){ var fr = new FileReader(); fr.addEventListener('load',e=>{ var type=file.type; if(["image/jpeg","image/gif","image/png"].indexOf(type)>-1){ var blob=new Blob([e.target.result],{type}); var binary=String.fromCharCode.apply("",new Uint8Array(e.target.result)); var src="data:"+file.type+";base64,"+btoa(binary); var style="max-width:100px;max-height:100px"; var img=Object.assign(document.createElement('img'),{src,style}); Object.assign(document.querySelector('#preview'),{textContent:""}).appendChild(img); }else{ target.value=""; document.querySelector('#preview').textContent=""; } }); fr.readAsArrayBuffer(file); } }); }); </script> <form method="post" enctype="multipart/form-data"> <input type="file" name="up" id="up"><span id="preview"></span> <input type="submit" value="send"> </form>
tete2

2020/05/01 09:21

なるほど、、javascriptはあまりわからないのですが、ファイルのアップロードとデータの確認はできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問