Я хотел бы использовать Blockly в форме, чтобы позволить пользователям создавать свой собственный алгоритм.
Для этого я использую созданный мной блок return, чтобы я мог вызвать этот алгоритм с помощью eval в PHP.
Вот инициализация моего блока:
var jsonReturn = {
"message0" :"Return %1",
"args0" :[
{"type":"input_value", "name":"script"}
],
"previousStatement" :null,
"colour" :70,
"tooltip" :"Renvoie le nouveau prix"}
Blockly.Blocks['return'] = {init: function() { this.jsonInit(jsonReturn);}};
А вот генератор кода для PHP:
Blockly.PHP['return'] = function(block) {
var argument0 = Blockly.PHP.valueToCode(block, 'script');
var code = 'return ' + argument0 + ';\n';
return code;
};
То, что я хотел бы сделать, это использовать большой блок возврата, который содержал бы весь алгоритм в нем, и сделать этот блок возврата невозможным для удаления.
Может ли кто-нибудь помочь мне в этом?
Благодарю.
Если вы хотите, чтобы ваш блок всегда находился в рабочей области и не мог быть удален, вы можете загрузить его из XML, как только страница загрузится.
Ваш XML будет выглядеть так:
<xml xmlns="http://www.w3.org/1999/xhtml">
<block type="return" id="my_return_block_id" deletable="false"></block>
</xml>
Вы бы загрузить это с Blockly.Xml.domToWorkspace(yourXml, yourWorkspace)
,
Если вы хотите, чтобы пользователь добавил блок, но чтобы потом его можно было удалить, вы можете сделать отдельный блок неудаляемости с block.setDeletable(false)
после того, как блок был создан.
Других решений пока нет …