ã¯ããã«
ã¿ãªããããã«ã¡ã¯ïŒ å°ãåãç§ã¯ç€Ÿå
ã®ã¡ãŒã«ãµãŒãã¹ã«èŠèŠçãªé»åã¡ãŒã«ãšãã£ã¿ãŒãåã蟌ãã¿ã¹ã¯ãåãåããŸããã人ã
ãæã§htmlãå
¥åããæåã®æå¹ãªãã³ãã¬ãŒããäœæããã®ã«ç²ããŠããããã§ãã ã€ã³ã¿ãŒããããããŸããåŸãç§ã¯2人ã®ç·šéè
ãèŠã€ããŸããããããã®ç·šéè
ã¯ãåœæç§ã«ã¯ãããã®ç®çã«æé©ã ãšæãããŸããã ãããã¯ã®æåŸã«ããããžã®ãªã³ã¯ãæäŸããŸãã ããããããæ
éã«ç 究ããåŸïŒ EmailEditor㯠jQueryã䜿çšããŠæžãããŠãããç§ã¯ãã€ãŠéåžžã«ããç 究ãã Mosaicoã¯KnockoutJSã䜿çšããŠããŸããããè¡šé¢çã«ã®ã¿ç¥ã£ãŠããŸãïŒãç§ã¯EmailEditorã«ç«ã¡å¯ãã1幎åã«æåããŸããAngularãšIonicã®å©ããåããŠãã€ãŸãã2ã3kè¡ã®ãã¡ã€ã«ãããŸããŸãªå ŽæããããŸããŸãªæ¹æ³ã§DOMãåºç¯ãã€ã©ã³ãã ã«å€æŽããããªã©ãããããããŸããïŒã
1ãæ以äžããã¹ãŠã®ãã°ã®ä¿®æ£ãé
åžã«å¿
èŠãªãã«ãã£ã³ã°ãããã¯ã®æ¥çãªã©ãè©Šã¿ãŠãç§ã¯ãããããŸãã...ç§ã¯Mosaicoãè©ŠããŠã¿ãããšã«ãã Knockoutãç©æ¥µçã«ç 究ãå§ããŸããããåé¡ã¯ãã®ã¢ã³ã¹ã¿ãŒïŒç§ã¯Mosaicoã«ã€ããŠè©±ããŠããïŒãã®EmailEditorã¯ããã»ã©æªããªãããã§ããã å ããŠããã¹ãŠã«å ããŠããŸãã¯ãã€ãã¹ã§ããããšã«å ããŠãMosaicoã«ã¯å®è³ªçã«æ£ããããã¥ã¡ã³ãããããŸãããæåã«ãã¹ãŠãã©ã®ããã«æ©èœããèªåã®ãããã¯ãäœæããããçŽæçã«ç解ããå ŽåãçŽæã¯åœ¹ã«ç«ã¡ãŸããã§ããã ãããããååãªé è³ãå¿èãç解ãã欲æ±ããªãã£ãã®ãããããŸããããããªãã®äœæã«ãããã®ç·šéè
ã®åºå
žãèŠãŠãã ãã...ãããŠç· ãåãã¯å³ããã£ãã§ã...
ã©ãããïŒïŒ
ç§ã¯èªåèªçããããã¡ãããè»èŒªãåçºæããŠãã ãããéè²ã®ãã§ãŒã³ãšã©ãºããªãŒã®è»èŒªã§ïŒããšçããŸããã å¶ç¶ãç§ã®ããããããžã§ã¯ãã®1ã€ã§ãWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®çŸåšäººæ°ã®ããReact + Reduxã¢ãããŒãã®ç 究ãéå§ããå¿
èŠããããŸããã Reduxã«ã€ããŠèªãã åŸãç§ã¯å€æãããŸããïŒ ããã«ããïŒ ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã1ãæã«ãã-ã¬ã¿ãŒãã³ãã¬ãŒãã®JSONè¡šçŸãå€æŽãããã¢ãŒããã¯ãã£ãæ§ç¯ããã®ã¯æè¯ã®éžæè¢ã§ã¯ãããŸããïŒ ãããŠãç§ã¯æžãå§ããŸãã...æ°é±éã®ç ããªãå€ã®åŸããããã¿ã€ããåœå±ã«æ瀺ãããç§ã®ãšãã£ã¿ãŒã玹ä»ããããšããããšã決å®ãããŸããã ãªããžããªã«ãããšãæåã¯ãã³ãã¬ãŒãã®æ§é ãšäœæ¥ã®ååã決å®ããã®ãé£ããããšãããããŸããããå匷ããªããããŸããŸãªã¢ãããŒããè©ŠããŠã¿ãŸãããããããè€éã«ããªãããšã決å®ããŸããïŒ
- template-åãããã¯ã«å«ãŸãããããã¯ä»ãã¬ã¿ãŒãã³ãã¬ãŒãïŒ
- id-ãããã¯èå¥åïŒDate.nowïŒïŒã䜿çšããå¿é
ããŸããïŒ;
- block_type-ãããã¯ã®ã¿ã€ãïŒçç±ãããã«èª¬æããŸãïŒ;
- options-ã³ã³ããããã³ãããã¯èŠçŽ ã®ã¹ã¿ã€ã«ãšããããã£ã
- ã³ã³ãã-ãããã¯ã®ã¹ã¿ã€ã«ã«çŽæ¥ä»£å
¥ããããªããžã§ã¯ããã€ãŸã ãããã¯CSSã¹ã¿ã€ã«ã§ãã
- elements-ãããã¯èŠçŽ ãšãœãŒã¹ãããã¹ãåã®ãã©ã¡ãŒã¿ãŒã®CSSã¹ã¿ã€ã«ïŒããããçµã¿åãããŠæã«ããããšã«ããŸããïŒ;
- common-ãããã¯ã®äžè¬çãªCSSèšå®ã
- ã³ã³ããŒãã³ã-ãããã¯ã®è¿œå ã«äœ¿çšå¯èœã
- ã¿ã-ã¿ãã®å¯èŠæ§ãèšå®ããŸãã
- tinymce_config-TinyMCEã䜿çšãããããã¯ã®äžè¬çãªæ§æã
- èšèª-ã¢ããªã±ãŒã·ã§ã³ã®ããŒã«ã©ã€ãºã
- templateId-ä¿å/ããŒãçšã®ãã³ãã¬ãŒãIDã
ãããåºå
šäœã§ãã
ç·šéè
ã¬ãã¥ãŒ
éå§ããå Žæ...以äžã§ã¯ã NodeJS ãnpmãã§ããã°MongoDBãã€ã³ã¹ããŒã«ãããŠããããšãããã³ããããReact + Reduxã¹ã¿ãã¯ã®æäœçµéšãã»ãšãã©ãªããšä»®å®ããŸãã ãããžã§ã¯ãã¯create-react-appã䜿çšããŠèšè¿°ãããŠãããããã©ã€ãéçºã®éå§ã¯ç°¡åã§ãã ãã®ããããªããžããªãã³ããŒãããã次ã®ããã«ããŸãã
npmã€ã³ã¹ããŒã«
npm start
ãããžã§ã¯ããã©ã«ããŒãšãã©ãŠã¶ãŒã§ã¢ãã¬ã¹httpïŒ// localhostïŒ3000ãéãã次ã®ãããªãã®ã衚瀺ãããŸãã
å©çšå¯èœãªãã±ãŒã«ã®ãã¡ããããŸã§ãµããŒããããŠããã®ã¯enãšruã®ã¿ã§ãããŠã³ããŒãã¯translationsãã©ã«ããŒã®JSONãã¡ã€ã«ããçŽæ¥è¡ãããŸããæ®å¿µãªããããŠãŒã¶ãŒãã±ãŒã«ãããã©ã«ãã§å©çšå¯èœãã©ããã確èªããããã®ãã§ãã¯ã¯ãŸã æžããŠããŸãããããããã¯äºçŽ°ãªããšã§ããã¢ããªã±ãŒã·ã§ã³-ã«ãŒãsrc /ã® index.jsã«åæã¹ãã¢ãèšå®ããããªããžããªããIDã«ãã£ãŠååŸããããã±ãŒã«ããããã¯ãªã¹ãããã³ãã¬ãŒãããŸãã¯IDãæå®ãããŠããªãå Žåã¯ããã©ã«ããã³ãã¬ãŒããããŒãããããã«3ã€ã®ã¢ã¯ã·ã§ã³ããã£ã¹ããããããŸãã æåã®èµ·åã¯ãã©ã¡ãŒã¿ãŒãªãã§è¡ãããããããã¹ãŠãããŒã«ã«ãã¡ã€ã«ããèªã¿èŸŒãŸããŸãããã®æ®µéã§ã¯ãµãŒããŒã®ã»ããã¢ããã¯å¿
èŠãããŸããïŒãã ãããã³ãã¬ãŒãã®ä¿å/èªã¿èŸŒã¿ãç»åã®èªã¿èŸŒã¿ããã¹ãã¬ã¿ãŒã®éä¿¡æ¹æ³ã«ã¯å¿
èŠã§ãïŒã
ã€ã³ã¿ãŒãã§ã€ã¹ã¯éåžžã«ã·ã³ãã«ã§ã-å·ŠåŽã«ã¯èšå®ãšãããã¯ã®ããã«ããããäžå€®ã«ã¯ã¬ã¿ãŒãã³ãã¬ãŒããããããã³ãã¬ãŒãã®äž¡åŽã«ã¯ãã¿ã³ããããŸãã ãããã¯ã¯ãã³ãã¬ãŒãã«ãã©ãã°ã§ããŸãïŒã¿ãŒã²ãããããã¯äžã«ãããã®ããã«è¿œå ããããã¹ãŠãäžã«ç§»åããŸãïŒãã¿ãŒã²ãããããã¯äžã«ããŠã¹ã移åãããšãè²ãå€ãããŸãã ããã§ã¯ãä»ã®äžéšã®ãšãã£ã¿ãŒãšåæ§ã«ãããã¡ã³ãã ãããã¯ãã®å®è£
ã«ã€ããŠèããŠããŸãããããã¯åªå
äºé
ã§ã¯ãããŸããã ãããã¯ãã¯ãªãã¯ãããšãéžæãããããã¯ã®èšå®ãå«ãã¿ããã¢ã¯ãã£ãã«ãªãããã®ãããã¯ã匷調衚瀺ãããã¹ã¯ãªãŒã³ã·ã§ããã«èŠãããããã«ããããã¯ã®åé€ãã¿ã³ã衚瀺ãããŸãã
ããŠãäžè¬èšå®ã¿ããéžæãããšãã«ã¹ã¿ã ã¹ã¿ã€ã«ãã©ã°ãæã€ãã®ãé€ããã¹ãŠã®ãããã¯ã«é©çšãããèšå®ã®ã»ããã衚瀺ãããŸãã ãŸãããã³ãã¬ãŒãã³ã³ããã®èæ¯ãèšå®ããæ©äŒããããŸãã
ãã¿ã³ãã¯ãªãã¯ãããšããã³ãã¬ãŒããä¿åãïŒãã³ãã¬ãŒãã®ååãèšå®ããããã«æ±ããããŸãããç°¡åã«åãåãããšãã§ããŸãïŒããã¹ãã¬ã¿ãŒãéä¿¡ããŠãããã¯ãåé€ã§ããŸãïŒå
ã«æ»ã\ããçŽãæ©èœãå®è£
ããèšç»ããããŸãïŒ
ãŸããã¡ã€ã³ãããžã§ã¯ããã©ã«ããŒã§npm run buildãå®è¡ããå Žåã«è¡šç€ºããããã«ããã©ã«ããŒãã³ããŒããåŸãäž¡æ¹ã®ãã©ã«ããŒã§npm installãå®è¡ããããšãå¿ããªãã§ãã ããïŒ ãµãŒããŒã§ã§ããããšïŒsaves \ã¯ãã³ãã¬ãŒãïŒïŒId = your_idïŒãçæããç»åãã¢ããããŒãããŸãããŸãããã¹ãã¬ã¿ãŒãéä¿¡ãããšãã«ãOKããšè¡šç€ºããŸã=ïŒã ç解ããã®ã¯é£ãããªããšæããŸãããããžã§ã¯ãã®æ§é ã¯éåžžã«åçŽã§ããè€éã«ããã®ã¯å¥œãã§ã¯ãããŸãã...ãšã³ããªãã€ã³ãã¯app.jsã§ã ã¢ããªãã©ã«ããŒã«ã³ã³ãããŒã©ãŒããããŸãããã¹ãŠã®åäœããããŸãã ã
å°ãå
åŽ
src / componentsãã©ã«ããŒã«ã¯ã ãããã¯ã®ãµããã©ã«ããŒãšãªãã·ã§ã³ãããããããã¯ã®ãã³ãã¬ãŒããšãããã®ãããã¯ã®èšå®ããããŸãã
hrã䜿çšãããããã¯ã®äŸimport React from 'react'; const BlockHr = ({ blockOptions }) => { return ( <table width="550" cellPadding="0" cellSpacing="0" role="presentation" > <tbody> <tr> <td width="550" style={blockOptions.elements[0]} height={blockOptions.container.height} > <hr /> </td> </tr> </tbody> </table> ); }; export default BlockHr;
hrã䜿çšãããããã¯èšå®ã®äŸ import React from 'react'; const OptionsHr = ({ block, language, onPropChange }) => { return ( <div> <div> <label>{language["Custom style"]}: <input type="checkbox" checked={block.options.container.customStyle? 'checked': '' } onChange={(e) => onPropChange('customStyle', !block.options.container.customStyle, true)} /></label> </div> <hr /> <div> <label>{language["Height"]}: <input type="number" value={block.options.container.height} onChange={(e) => onPropChange('height', e.target.value, true)} /></label> </div> <div> <label>{language["Background"]}: <input type="color" value={block.options.container.backgroundColor} onChange={(e) => onPropChange('backgroundColor', e.target.value, true)} /></label> </div> </div> ); }; export default OptionsHr;
src / componentsãã©ã«ããŒã«ãBlock.jsãã¡ã€ã«ããããŸãããã®ãã¡ã€ã«ã«ã¯ã ãããã¯ãšswitch ...ã®ãã¹ãŠã®ãããã¯ãæ¥ç¶ãããŠããã block_type ïŒåè¿°ïŒããããã¯ã®ã©ã®ããŒãžã§ã³ãè¿ããã決å®ããŸãã
åãååã¯ãèšå®çšã®Options.jsãã¡ã€ã«ã«ããããŸãã ãããŠä»ãç§ã¯ãã®ã¢ãŒããã¯ãã£ããã§ããã ãæ©ãéããããšæã£ãŠããŸãïŒèª°ããã©ã®æ¹åã«ç§»è¡ããã®ãèããŠããã®ã§ããããïŒïŒ BlockList.jsãã¡ã€ã«ã«ã¯ããã¹ãŠãã©ã®ããã«æ©èœãããã瀺ãã¬ã¿ãŒãã³ãã¬ãŒããå«ãŸããŠããŸããtr > tdèŠçŽ ã¯ãµã€ã¯ã«ã§æ§ç¯ãããŸãããã®å Žåã tdã¯ãèŠçŽ ãæã€ãããã¯ãæ¢ã«é
眮ãããŠããã³ã³ããã§ãã ã³ã³ããèšå®ïŒblock.options.containerã®ã¹ã¿ã€ã«ïŒãããã«éžæããã DnDããžãã¯ãå®è£
ãããŸãã èšå®ã§ããã¹ãŠãéæã§ãããonChangeãã³ãã©ãŒãå
¥åã«ãã³ã°ã¢ãããããã®äžã§onPropChange ïŒpropãvalueãcontainerïŒãelement_indexïŒããã©ã¡ãŒã¿ãŒïŒãè²ãªã©ã®å€æŽããããããã£ããæ°ããããããã£å€ãå€æŽããèŠçŽ ïŒã³ã³ãããŒ- trueãèŠçŽ ã¯falseïŒãèŠçŽ ã€ã³ããã¯ã¹ïŒã ååãšããŠããããäž»èŠãªã¢ã€ãã¢ã§ããããã以äžäŒããããšã¯ãããŸãã=ïŒã ãã€ã³ããããã§ã¯ããã®ãã€ãã©ã€ã³ã®åäœãã¹ã±ããããããšããŸããã
PSãªããžããªã«ã¯ã masterãšreact_email_editor_wordpressã® 2ã€ã®ãã©ã³ãããããŸãã ååãšããŠãç¹å¥ãªéãã¯ãããŸãããsagas/ api.jsãã¡ã€ã« ïŒWPã«ã¯AJAXãžã®ç¬èªã®ã¢ãããŒãããããŸãïŒããã£ãŒãããã¯ããœãŒã·ã£ã«ãªã©ã®ãããã¯ããããŸãïŒåçãžã®ãã¹ã¯ããã§ç°ãªããŸã... WP zhezhïŒã ãšãã£ã¿ãŒã¯WPã«çµ±åãããŠãããçŸåšãã¹ãäžã§ãã
ã§ã¯ãã©ã®ããã«ãããã¯ãäœæããŸããïŒ
ãšãŠãç°¡åã§ãïŒ ãŸããããã¯ããã ãšæããŸãããªããªãç§ã¯ããããã£ãããšæ¯æ¥åããŠããããã§ã...
ãããã¯ã®ã¿ã€ããéžæããããšããå§ããŸãã ã€ã³ã¿ãŒãããããµãŒãã£ã³ããŠãããšãã«ã1ã€ã®çŽ æŽããããã³ãã¬ãŒãã«åºäŒããŸããã
WEBSITESãSERVICESãSEOã®3ã€ã®ã¢ã€ã³ã³ãä»ãããããã¯ãæ°ã«å
¥ããŸããã ããŠããã®ãããªãããã¯ãå®è£
ããæ¹æ³ãæããŠã¿ãŸãã ãŸãããããã¯ã®æ§æã決å®ããŸãããã ããã«ã¯6ã€ã®èŠçŽ ããããŸãã3ã€ã®åçãš3ã€ã®ããã¹ãèŠçŽ ã§ãããã®åŸããã®ãããã¯ã®ããžã§ã³ãããã°ã©ã ã§ããŸãã æ§æãã§ããã ãæè»ã«ããããšãããããã»ãšãã©ãã¹ãŠã®ã¬ã€ã¢ãŠãïŒããšãã°ã3ã€ã®ç»åããã¹ãèŠçŽ ïŒãèªç±ã«æãã€ãããšãã§ããããã¯éåžžã«å®çŸå¯èœã§ãã ååãªèšèã§ã³ãŒãã£ã³ã°ããŠãã ããïŒ
public / components.jsonãã¡ã€ã«ãéãã次ã®JSONãè¿œå ããŸãã
ãããã¯3ã¢ã€ã³ã³ ... ... { "preview": "images/3_icons.png", "block": { "block_type": "3_icons", "options": { "container": { "padding": "0 50px", "color": "#333333", "fontSize": "20px", "customStyle": false, "backgroundColor": "#F7F8FA" }, "elements": [{ "source": "https://images.vexels.com/media/users/3/136010/isolated/preview/e7e28c15388e5196611aa2d7b7056165-ghost-skull-circle-icon-by-vexels.png" }, { "source": "http://www.1pengguna.com/1pengguna/uploads/images/tipimgdemo/kesihatan.gif" }, { "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Circle-icons-cloud.svg/2000px-Circle-icons-cloud.svg.png" }, { "text": "DEADS", "textAlign": "center" }, { "text": "LOVES", "textAlign": "center" }, { "text": "CLOUDS", "textAlign": "center" }] } } }, ... ...
ãããã£ãŠã ç»å3_icons.pngã®ãã¬ãã¥ãŒãã³ã³ãããããã³6ã€ã®èŠçŽ ã䜿çšããŠãã¿ã€ã3_iconsã®ãããã¯ãå®çŸ©ããŸããã ãããã¯æ¢ã«äœããã®åºæ¬çãªã¹ã¿ã€ã«èšå®ãæã£ãŠããã®ã§ãè¿œå ãããšå€å°ãŸãšãã«èŠããŸãã OKã次ã«GIMPïŒã€ã³ã¹ããŒã«ãããŠããå ŽåïŒãéãããã®äžã®preview_template.xcfãã¡ã€ã«ãéããŸãã ãã®ãã¡ã€ã«ã¯ãããžã§ã¯ãã®ã«ãŒãã«ãããŸãã ãããã¯ã®ãã¬ãã¥ãŒããªãããããããã«ãããã空çœã«ããŸããã ãã³ãã¬ãŒãã®å
ã®ç»åããç°¡åãªæäœïŒã«ãã\貌ãä»ã\è²ä»ãïŒãè¡ããšãå°æ¥ã®ãããã¯ã®ãã¬ãã¥ãŒã衚瀺ãããŸãã

src / imagesãã©ã«ããŒïŒãŸãã¯public / images ããŸãã¯äž¡æ¹ã®å ŽæïŒã«ä¿åãããšãã£ã¿ãŒã§ããŒãžãæŽæ°ããŸãã components.jsonã§æ¿å
¥ããäœçœ®ã«æ°ãããããã¯ãè¿œå ãããŠããããšãããããŸãã
ããšãã°ãHEADERã®åŸã«ç«ã¡åŸçããŠããŸã 次ã«ããããã¯ãã³ãã¬ãŒããäœæããŸãã æ°ããBlock3Icons.jsãã¡ã€ã«ãsrc / components / blocksãã©ã«ããŒã«è¿œå ããŸãã
Block3Icons.js import React from 'react'; const Block3Icons = ({ blockOptions, onPropChange }) => { const alt="cool image"; return ( <table width="450" cellPadding="0" cellSpacing="0" role="presentation" > <tbody> <tr> <td width="150"> <a width="150" href={blockOptions.elements[0].source}> <img alt={alt} width="150" src={blockOptions.elements[0].source} /> </a> </td> <td width="150"> <a width="150" href={blockOptions.elements[1].source}> <img alt={alt} width="150" src={blockOptions.elements[1].source} /> </a> </td> <td width="150"> <a width="150" href={blockOptions.elements[2].source}> <img alt={alt} width="150" src={blockOptions.elements[2].source} /> </a> </td> </tr> <tr> <td style={blockOptions.elements[3]}>{blockOptions.elements[3].text}</td> <td style={blockOptions.elements[4]}>{blockOptions.elements[4].text}</td> <td style={blockOptions.elements[5]}>{blockOptions.elements[5].text}</td> </tr> </tbody> </table> ); }; export default Block3Icons;
ã芧ã®ãšãããæãåçŽãªãããã¯ã¯2è¡3åã§ãã èŠçŽ ã®èšå®ããããããŸã§ã¯ç»åèŠçŽ ã®ãœãŒã¹ãšããã¹ãèŠçŽ ã®ããã¹ãã®ã¿ãå©çšå¯èœã«ããŠããŸããããã³ã³ããã¹ã¿ã€ã«ã¯ããã¹ãã§åè¿°ããBlockList.jsãã¡ã€ã«ã§äœ¿çšãããŸãã
ãããã¯èšå®ãäœæããŸãã src / components / optionsãã©ã«ããŒã«æ°ããOptions3Icons.jsãã¡ã€ã«ãè¿œå ããŸãã
Options3Icons.js import React from 'react'; const Options3Icons = ({ block, language, onFileChange, onPropChange }) => { let textIndex = 3; let imageIndex = 0; return ( <div> <div> <label>{language["Custom style"]}: <input type="checkbox" checked={block.options.container.customStyle? 'checked': '' } onChange={(e) => onPropChange('customStyle', !block.options.container.customStyle, true)} /></label> </div> <hr /> <div> <label>{language["Color"]}: <input type="color" value={block.options.container.color} onChange={(e) => onPropChange('color', e.target.value, true)} /></label> </div> <div> <label>{language["Background"]}: <input type="color" value={block.options.container.backgroundColor} onChange={(e) => onPropChange('backgroundColor', e.target.value, true)} /></label> </div> <hr /> <div> <label> {language["URL"]} <select onChange={e => imageIndex = +e.target.value}> <option value="0">{language["URL"]} 1</option> <option value="1">{language["URL"]} 2</option> <option value="2">{language["URL"]} 3</option> </select> </label> </div> <div> <label> {language["URL"]} {imageIndex + 1}: <label> <input type="file" onChange={(e) => { onFileChange(block, +imageIndex, e.target.files[0]); }} /> <div>⊕</div> </label> <input type="text" value={block.options.elements[+imageIndex].source} onChange={(e) => onPropChange('source', e.target.value, false, +imageIndex)} /> </label> </div> <hr /> <div> <label> {language["Text"]} <select onChange={e => textIndex = +e.target.value}> <option value="3">{language["Text"]} 1</option> <option value="4">{language["Text"]} 2</option> <option value="5">{language["Text"]} 3</option> </select> </label> </div> <div> <label> {language["Text"]} {textIndex - 2} <input type="text" value={block.options.elements[+textIndex].text} onChange={e => onPropChange('text', e.target.value, false, +textIndex)} /> </label> </div> </div> ); }; export default Options3Icons;
ãããïŒ ã»ãŒå®äºïŒ ç§ãã¡ã¯ãã§ã«ããã§äœæããŠããããšãé¡ã£ãŠããŸããããªãã¯å°ãªããšãããæåã§ããïŒ ãããã¯ã§ã¯ããã¹ãŠãæãã§ãïŒããã¯ãã ã³ã³ããŒãã³ãã§ãããããã€ãŸãããã®å°éå
·ã«åºã¥ããŠã®ã¿ã¬ã³ããªã³ã°ãããŸãïŒã èšå®ã§ã¯ãåå
¥åèŠçŽ ïŒãã§ãã¯ããã¯ã¹ãå
¥åãªã©ïŒããããããã£ã«å¯ŸããŠonPropChangeãåŒã³åºããããã³ãã©ãŒã«é¢é£ä»ããããŠããŸãïŒäžèšã§ã説æããŸããïŒã ãããã®ããããã£ã«åºã¥ããŠããããã¯ã¯åã³åçã«ã¬ã³ããªã³ã°ãããŸãã ãã¹ãŠãã·ã³ãã«ã§ãã ããã§äœæ¥ã®çµæãé©çšããæçµçã«ããããŸã£ããæ©èœãããã©ããã確èªããŸããã=ïŒã
ãããè¡ãã«ã¯ãæ°ãããããã¯ã®ã€ã³ããŒããšãã®æ»ãæ¡ä»¶ãsrc / components / Block.jsãã¡ã€ã«ã«è¿œå ããŸãã
src / containers / Options.jsã§ã»ãŒåãããšãè¡ããŸã
ããã§ããã¹ãŠã®ãã¡ã€ã«ãä¿åããã以åã«ãããžã§ã¯ãã®ã«ãŒãã§npm startãå®è¡ããå Žåããã¹ãŠããšã©ãŒãªãã§ã³ã³ãã€ã«ãããŸãã æ°ãããããã¯ããã³ãã¬ãŒãã«ãã©ãã°ããéžæããŠããã®èšå®ãåçããŸãã ããã¯ç§ã«ãšã£ãŠã©ã®ããã«èŠãããã®äŸã§ãïŒ
åèš
ãšãã£ã¿ãŒãã§ããã ãã·ã³ãã«ã§äœ¿ãããããã€ã³ã¿ãŒãã§ãŒã¹ã®é¢ã§éåžžã«äŸ¿å©ãªãã®ã«ããããšããŸãããããããè¡ããã©ããã¯ãã¡ããããªã次第ã§ãã ç§ã®æèŠã§ã¯ã Mosaicoãšã¯å¯Ÿç
§çã«ãã³ã³ããŒãã³ãããŒã¹ã®å°å
¥ãšæ¡åŒµã®ç¹ã§ããšã³ããªã®ãããå€ãäœããšãã£ã¿ãŒãå€æããŸããã ãŸãã Mosaicoãšæ¯èŒããŠã¯ããã«éææ§ãé«ããïŒ EmailEditorãšæ¯èŒããŠïŒãã°ã®å°ãªãå®è£
ã§ãããæåéãæ°æéïŒã»ãšãã©ã®å Žåã¯æ°æ¥ïŒã§æ§æããæ¡åŒµããããŒãºã«ç°¡åã«å¯Ÿå¿ã§ããŸãã
èšç»ã¯åŒãç¶ã次ã®é
ç®ã§æ©èœããŸãã
- ã¬ã¹ãã³ã·ããã³ãã¬ãŒãã®ã¹ã¿ã€ã«ã
- å
ã«æ»ã\ããçŽãæ©èœã®å®è£
ã
- çŽ æµãªãã¶ã€ã³ãäœããŸãïŒèªåã§ã¯ã§ããŸãããå©ããå¿
èŠã§ã...ïŒ;
- TinyMCEãåé¢ããŠãããã¹ãèŠçŽ ãå«ããããã¯ã«åå²ããªãããã«ããŸãã
- ãšãã£ã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«ã¹ã¿ã€ã«ä»ãã³ã³ããŒãã³ãã®ãããªãã®ã䜿çšããŸãã
- NodeJSãµãŒããŒã®å®äºã ãã¡ã€ã«ããããŒã¿ããŒã¹ãžã®ãã±ãŒã«ãªã©ã®è»¢éãè¡ããŸãã
- ãããžã§ã¯ããããªããžããªã«ãããã¯ãšèšå®ã転éããswitch ...ã±ãŒã¹ãåãé€ããŸãã
- ãã¶ãããã³ãã¬ãŒãã®ãã¬ãã¥ãŒã®ãããªããšãããŸãïŒãã ããã¬ã¹ãã³ã·ãã®åŸã®ã¿ïŒã
- ãã¶ãããµãŒããŒã¬ã¹ã§ãã³ãã¬ãŒããã¢ããããŒãããããã«ããœãŒã¹ã³ãŒãã衚瀺ãããã§ãããã
- èšäºã§èšåãããŠããããã¡ã³ãã ãããã¯ããè¡ããããããŸããã
- ãã¡ãããåé¡ãšææ¡ã䌎ãç©æ¥µçãªäœæ¥=ïŒ;
- èŠããŠããã°ãäœãä»ã®ãã®ãè¿œå ããŸã...
ç§ã¯ãã¢ããã€ã¹ãæ¹å€ããã£ãŒãããã¯ãåãã§æ¯æŽããŸãã ããã«åºã¥ããŠããããžã§ã¯ãã«åå ãç¶ãããã©ããã決å®ããŸã=ïŒã
ããã§ãã¹ãŠã§ã...ãæž
èŽããããšãããããŸããïŒ ãã¡ããããããžã§ã¯ãã誰ãã«åœ¹ç«ã€å Žåã¯ãéåžžã«å€§ããªå€æŽã«ã€ããŠã®ã¿æžããŸãã
çŽæã®ãªã³ã¯