bogdanbatsenko

Magento Knockout issue

Jun 1st, 2022
157
0
Never
11
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.24 KB | None | 0 0
  1. PHTML
  2.  
  3.  
  4. <?php
  5. namespace Vendor\Brand\Block;
  6. ?>
  7.  
  8.  
  9. <script type="text/x-magento-init">
  10. {
  11. "*": {
  12. "Magento_Ui/js/core/app": {
  13. "components": {
  14. "servicesList": {
  15. "component": "Vendor_Brand/js/services"
  16. }
  17. }
  18. }
  19. }
  20. }
  21. </script>
  22. <div class="ko-wrapper" data-bind="scope: 'servicesList'">
  23. <div class="form-inner-wrapper" id="modal-service" >
  24. <div class="form-left">
  25. <form class="form contact"
  26. action="<?= $block->escapeUrl($block->getFormAction()) ?>"
  27. id="contact-form"
  28. method="post"
  29. data-hasrequired="<?= $block->escapeHtmlAttr(__('* Required Fields')) ?>"
  30. data-mage-init='{"validation":{}}'
  31. >
  32. <fieldset class="fieldset">
  33. <legend class="legend"><span><?= $block->escapeHtml(__('Write Us')) ?></span></legend><br />
  34. <div class="field note no-label"><?= $block->escapeHtml(__('Make an appointment with Us!')) ?></div>
  35. <div class="field email required">
  36. <div class="control">
  37. <input name="email"
  38. id="email"
  39. title="<?= $block->escapeHtmlAttr(__('Email address')) ?>"
  40. value="<?= $block->escapeHtmlAttr(__('Email')) ?>"
  41. class="input-text" type="email"
  42. data-validate="{required:true, 'validate-email':true, 'validate-exclude-magento':true}"
  43. placeholder="<?= $block->escapeHtmlAttr(__('Email address')) ?>"
  44. required
  45. data-bind="value: email"
  46. />
  47. </div>
  48. </div>
  49. <div class="field telephone">
  50. <div class="control">
  51. <input
  52. name="telephone"
  53. id="telephone"
  54. title="<?= $block->escapeHtmlAttr(__('Phone Number')) ?>"
  55. value="<?= $block->escapeHtmlAttr(__('Telephone')) ?>"
  56. data-validate="{required:true, 'validate-phoneStrict':true}"
  57. class="input-text"
  58. type="text"
  59. data-bind="value: telephone"
  60. />
  61. </div>
  62. </div>
  63.  
  64. </fieldset>
  65. <div class="actions-wrapper actions-toolbar actions">
  66. <div class="actions__left">
  67. <div class="control">
  68. <input
  69. type="checkbox"
  70. id="terms"
  71. class="checkbox"
  72. name="terms"
  73. required
  74. data-validate="{required:true}">
  75. <label for="terms"><?= $block->escapeHtml(__('Terms & conditions approval.')) ?>
  76. <span>
  77. <a href="#" class="actions_privacy">
  78. <?= $block->escapeHtml(__('Privacy & policy')) ?>
  79. </a>
  80. </span>
  81. </label>
  82. </div>
  83. </div>
  84. <div class="actions__right">
  85. <div class="primary">
  86. <input
  87. type="hidden" name="hideit" id="hideit" value="" />
  88. <button
  89. type="submit"
  90. title="<?= $block->escapeHtmlAttr(__('Send Us')) ?>"
  91. id="form-send"
  92. class="action submit primary"
  93. data-bind="click: addService"
  94. >
  95. <span><?= $block->escapeHtml(__('Send Us')) ?></span>
  96. </button>
  97. </div>
  98. </div><!-- actions__left -->
  99. </div><!-- actions-wrapper actions-toolbar actions -->
  100. </form>
  101. </div><!-- form-left -->
  102. <div class="form-right" style="object-fit: cover; width: 100%;">
  103. <img
  104. src="<?php echo $this->getViewFileUrl('images/form-image-right.jpg'); ?>"
  105. >
  106. </div><!-- form-right -->
  107. </div><!-- form-inner-wrapper -->
  108.  
  109. <div class="services" >
  110. <p data-bind="visible: EntityRows().length == 0">There is no services</p>
  111. <p>You have asked for <span data-bind="text: services().length">&nbsp;</span> gift(s)</p>
  112. <ul data-bind="foreach: services" id="todo-list">
  113. <li>
  114. <div class="todo-text" data-bind="text: $index() + 1"></div>
  115. <div class="todo-text" data-bind="text: email"></div>
  116. <div class="todo-text" data-bind="text: telephone"></div>
  117. <a href="#" class="todo-destroy" data-bind="click: $parent.removeService">&times;</a>
  118. </li>
  119. </ul>
  120. </div>
  121.  
  122. </div><!-- ko-wrapper -->
  123.  
  124.  
  125. <script type="text/javascript">
  126. require([
  127. "jquery",
  128. "Magento_Ui/js/modal/modal",
  129. ],
  130. function($, modal) {
  131. var options = {
  132. type: 'popup',
  133. responsive: true,
  134. title: '',
  135. buttons: []
  136. };
  137. var modalService = $('#modal-service');
  138. var popup = modal(options, modalService);
  139. $("#button-add-service").click(function() {
  140. modalService.modal('openModal');
  141. });
  142. });
  143. </script>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150.  
  151.  
  152.  
  153. services.js
  154. 'use strict';
  155. define([
  156. 'ko',
  157. 'uiComponent',
  158. ], function (ko, Component) {
  159. var self;
  160. return Component.extend({
  161. defaults: {
  162. services: ko.observableArray([]),
  163. },
  164. email: ko.observable(),
  165. telephone: ko.observable(),
  166. initialize: function(){
  167. self = this;
  168. self.addService();
  169. self.removeService();
  170. this._super();
  171. return this;
  172. },
  173. addService: function(){
  174. console.log('add service');
  175. var servicesArr = {};
  176. self.servicesArr.push({
  177. email: self.email(),
  178. telephone: self.telephone()
  179. });
  180. self.email('');
  181. self.telephone('');
  182. },
  183.  
  184. removeService: function(service){
  185. self.services.remove(service);
  186. },
  187. });
  188. });
  189.  
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment