• R/O
  • SSH
  • HTTPS

zostportal: Commit


Commit MetaInfo

Revision104 (tree)
Time2021-01-29 08:17:33
Authorderekwildstar

Log Message

helpers.js
¯¯¯¯¯¯¯¯¯¯

Adicionado o campo privado para guardar o caminho do template
Alterado o construtor da classe para que seja possível informar o caminho do template
Criadas as funções privadas removeZIndex e restoreZIndex que respectivamente remove o ZIndex dos elementos informados e recupera seus ZIndexes originais. Estas funções foram usadas nos locais onde seu código estava sendo usado diretamente
Criada a função pública waitForSomething, que exibe o overlay sobre o site com uma imagem de "aguarde", usado em Ajax

helpers.php
¯¯¯¯¯¯¯¯¯¯¯

Informado o caminho da pasta do template no construtor do Helpers (javascript)
Incluído mais um elemento no array de elementos de showLanguageWarning

edit.php
¯¯¯¯¯¯¯¯

Alterada a chamada ao método validate, para capturar o submit e assim poder enviar uma requisição ajax para aplicar as alterações sem fechar a jenela de edição
Incluído o botão "Aplicar"

Change Summary

Incremental Difference

--- trunk/Projetos/Sobreposições/components/com_content/controllers/zost_article.php (revision 103)
+++ trunk/Projetos/Sobreposições/components/com_content/controllers/zost_article.php (revision 104)
@@ -11,7 +11,9 @@
1111 método público contido na classe atual ou nas suas classes ancestrais
1212
1313 Mais informações:
14- Dentre os arquivos de backup existe o arquivo
14+ Dentre os arquivos de backup existe o arquivo que explica como realizar
15+ vários tipos de overrides no Joomla um destes tipos é "Own Controller", que
16+ é o que foi feito aqui
1517 "zost\Projetos\Sobreposições\Change Joomla Without Core Hacks.pdf"
1618
1719 Use get_included_files() e get_defined_vars() para obter informações importantes
--- trunk/Projetos/Sobreposições/Leia-me.txt (revision 103)
+++ trunk/Projetos/Sobreposições/Leia-me.txt (revision 104)
@@ -7,3 +7,7 @@
77 Arquivo original = article.php
88 Arquivo sobrescrito = zost_article.php
99
10+ATENÇÃO!
11+
12+Eu mentive esta pasta e seu conteúdo apenas porque eu posso querer fazer isso no futuro e já tenho um exemplo, porém eu não utilizei nada daqui. Eu consegui resolver o problema do salvamento do form de edição sem fechar usando ajax, que terminou sendo muito mais elegante e eficiente
13+
--- trunk/Projetos/Templates/zost_basicblack/assets/_/js/helpers.js (revision 103)
+++ trunk/Projetos/Templates/zost_basicblack/assets/_/js/helpers.js (revision 104)
@@ -20,6 +20,7 @@
2020 // Campos privados //
2121 ////////////////////////////////////////////////////////////////////////////
2222 #overlayElement = null;
23+ #templateHref = null;
2324 #overlayTextElement = null;
2425 #additionalElements = null;
2526 #highlightedElement = null;
@@ -31,8 +32,9 @@
3132 * @constructor
3233 * @description Construtor da classe
3334 * @param {jQuery Object} aOverlayElement Elemento usado como overlay
35+ * @param {string} aTemplateHref Caminho absoluto a partir da raiz do site para o template atual
3436 */
35- constructor (aOverlayElement = null) {
37+ constructor (aOverlayElement = null, aTemplateHref = null) {
3638 if (aOverlayElement != null) {
3739 if (aOverlayElement instanceof jQuery) {
3840 this.#overlayElement = aOverlayElement;
@@ -41,6 +43,8 @@
4143 throw new HelpersException(1,"O parâmetro aOverlayElement não é um objeto jQuery válido");
4244 }
4345 }
46+
47+ this.#templateHref = aTemplateHref;
4448 }
4549 ////////////////////////////////////////////////////////////////////////////
4650 // Métodos privados //
@@ -64,10 +68,48 @@
6468 jQuery("body").css("overflow","auto");
6569 }
6670 }
71+ /**
72+ * Coloca os elementos informados num array interno que contém a referência
73+ * de cada elemento e seu z-index original. Ao adicionar a referência na
74+ * lista, o atributo z-index é removido (unset)
75+ *
76+ * @param {array} aElementsToRemoveZIndex Array de objetos jQuery cujo z-index precisa ser removido
77+ */
78+ #removeZIndex = function (aElementsToRemoveZIndex) {
79+ this.#additionalElements = new Array();
80+
81+ if (aElementsToRemoveZIndex != null) {
82+ let helper_this = this;
83+
84+ jQuery.each(aElementsToRemoveZIndex,function (aIndex, aValue) {
85+ helper_this.#additionalElements.push({"element":aValue,"zindex":aValue.css("z-index")});
86+ aValue.css("z-index","unset");
87+ });
88+ }
89+ }
90+ /**
91+ * Recupera o atributo z-index de todos os elementos existentes no array
92+ * interno #additionalElements
93+ */
94+ #restoreZIndex = function () {
95+ if (this.#additionalElements != null) {
96+ jQuery.each(this.#additionalElements,function (aIndex, aValue) {
97+ aValue.element.css("z-index",aValue.zindex);
98+ });
99+ }
100+
101+ this.#additionalElements = null;
102+ }
67103 ////////////////////////////////////////////////////////////////////////////
68104 // Métodos públicos //
69105 ////////////////////////////////////////////////////////////////////////////
70106 /**
107+ * Obtém o url absoluto (a partir da raiz do site) para a pasta do template
108+ */
109+ getTemplateHref() {
110+ return this.#templateHref;
111+ }
112+ /**
71113 * @description Adiciona/configura um cookie
72114 * @param {string} aName Nome do cookie a adicionar/configurar
73115 * @param {string} aValue Valor do cookie a ser configurado
@@ -168,19 +210,11 @@
168210 this.#overlayElement.css("display","none");
169211 }
170212
171- this.#additionalElements = new Array();
172213 // Coloca os elementos informados em aElementsToRemoveZIndex num array
173214 // interno que contém a referência de cada elemento e seu z-index
174215 // original. Ao adicionar a referência na lista, o atributo z-index é
175216 // removido (unset)
176- if (aElementsToRemoveZIndex != null) {
177- let helper_this = this;
178-
179- jQuery.each(aElementsToRemoveZIndex,function (aIndex, aValue) {
180- helper_this.#additionalElements.push({"element":aValue,"zindex":aValue.css("z-index")});
181- aValue.css("z-index","unset");
182- });
183- }
217+ this.#removeZIndex(aElementsToRemoveZIndex);
184218
185219 this.#highlightedElement = {"element":aElement,"position":aElement.css("position"),"zindex":aElement.css("z-index")};
186220 aElement.css("position","relative")
@@ -201,12 +235,7 @@
201235 this.#highlightedElement.element.css("z-index",this.#highlightedElement.zindex);
202236 this.#highlightedElement = null;
203237 // Recupera o atributo z-index de todos os elementos adicionais
204- if (this.#additionalElements != null) {
205- jQuery.each(this.#additionalElements,function (aIndex, aValue) {
206- aValue.element.css("z-index",aValue.zindex);
207- });
208- }
209- this.#additionalElements = null;
238+ this.#restoreZIndex();
210239 // Remove todos os elementos filhos do overlay
211240 this.#overlayTextElement.empty();
212241 this.#overlayTextElement.css("display","none");
@@ -421,4 +450,20 @@
421450 parseHtml(aHtml) {
422451 return jQuery(aHtml,document.implementation.createHTMLDocument("virtual"));
423452 }
453+ /**
454+ * Exibe uma animação de espera, normalmente usada em requisições Ajax
455+ * @param {boolean} aActive Use true para mostrar a animação e false para
456+ * ocultá-la
457+ */
458+ waitForSomething(aActive) {
459+ if (aActive) {
460+ this.#removeZIndex([jQuery("#searchButton")]);
461+ this.#overlayElement.append('<img src="' + this.#templateHref + '/assets/_/img/Infinity-2s-257px.gif" id="waitForSomething" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%)" />');
462+ } else {
463+ this.#restoreZIndex();
464+ jQuery("#waitForSomething").remove();
465+ }
466+
467+ this.#showOverlay(aActive);
468+ }
424469 }
\ No newline at end of file
--- trunk/Projetos/Templates/zost_basicblack/assets/_/php/helpers.php (revision 103)
+++ trunk/Projetos/Templates/zost_basicblack/assets/_/php/helpers.php (revision 104)
@@ -972,7 +972,7 @@
972972 // usando métodos disponibilizados pelo objeto. ATENÇÃO: current() não
973973 // retorna a query string
974974
975- // Assum que a url passada no parâmetro (ou a url detectada) é uma url
975+ // Assim que a url passada no parâmetro (ou a url detectada) é uma url
976976 // SEF
977977 $aUrl = $aUrl ?: Self::currentUrl();
978978
@@ -1060,7 +1060,7 @@
10601060 $zost->textDirection = $textDirection;
10611061 $zost->siteName = $this->cnf->get("sitename");
10621062 $zost->baseSiteUrl = Self::baseSite();
1063- $zost->templateHref = Self::baseSite(true) . "/templates/" . $this->app->getTemplate();
1063+ $zost->templateHref = Self::baseSite(true) . "/templates/" . $this->app->getTemplate(); // por que eu não usei a função estática templateHref?
10641064 $zost->ogImageUrl = $ogImageUrl;
10651065 $zost->ogImageWidth = $ogImageWidth;
10661066 $zost->ogImageHeight = $ogImageHeight;
@@ -1696,6 +1696,7 @@
16961696 // aqui
16971697 public function exclusiveHeaders() {
16981698 $helpers_js = $this->cacheBuster(JPATH_THEMES . "/{$this->doc->template}/assets/_/js/helpers.js");
1699+ $templateHref = $this->templateHref();
16991700
17001701 $html = <<<EOH
17011702 <script src="$helpers_js"> </script>
@@ -1707,7 +1708,7 @@
17071708 // contudo isso diz respeito apenas ao DOM, dimensões de elementos ainda não
17081709 // foram calculadas neste ponto
17091710 jQuery(function(jZost) {
1710- zostHelpers = new Helpers(jZost("#overlay"));
1711+ zostHelpers = new Helpers(jZost("#overlay"),"$templateHref");
17111712 });
17121713 // O código abaixo ocorre depois que outros elementos foram carregados, como
17131714 // imagens. Neste ponto é mais correta a obtenção de dimensões e posições
@@ -1715,7 +1716,7 @@
17151716 // precisam ser dimensionados e posicionados
17161717 jQuery(window).on("load",function() {
17171718 zostHelpers.showLanguageWarning(jQuery("div.languageSelector")
1718- ,[jQuery("#tab-content")]);
1719+ ,[jQuery("#tab-content"),jQuery("#searchButton")]);
17191720 });
17201721 /* ]]> */
17211722 </script>
--- trunk/Projetos/Templates/zost_basicblack/html/com_content/form/edit.php (revision 103)
+++ trunk/Projetos/Templates/zost_basicblack/html/com_content/form/edit.php (revision 104)
@@ -5,9 +5,7 @@
55
66 Descrição:
77 Script responsável por renderizar o componente que exibe a página de edição
8- de conteúdos. Este arquivo faz uso do controlador modificado "zost_article",
9- o qual precisa ser adicionado a "components\com_content\controllers" para
10- que os botões de salvamento e cancelamento funcionem
8+ de conteúdos
119
1210 Variáveis definidas por padrão:
1311 $this (ContentViewForm)
@@ -417,16 +415,40 @@
417415 jZost.datetimepicker.setLocale("pt-BR");
418416 // =========================================================================
419417 // == Validador de formulário ==============================================
420- jZost("form#adminForm").validate();
418+ jZost("form#adminForm").validate({submitHandler: function (aForm, aEvent) {
419+ // O atributo submitHandler define uma função de callback que é chamada
420+ // sempre que o form é validado com sucesso. Ao usar esta função, o
421+ // formulário não será enviado a não ser que você faça isso manualmente,
422+ // como foi feito abaixo. Caso tenhamos pressionado o botão "Aplicar", o
423+ // form será enviado via Ajax com exatamente os mesmos valores
424+ // informados. Caso qualquer outro botão tenha sido pressionado o envio
425+ // do form será normal
426+ if (jZost(aForm).find('input[name="task"]').val() == "article.apply") {
427+ zostHelpers.waitForSomething(true);
428+ jZost.post($(aForm).action
429+ ,$(aForm).serialize()
430+ ,function (aData, aTextStatus, aJqXHR) {
431+ zostHelpers.waitForSomething(false);
432+ });
433+ } else {
434+ aForm.submit();
435+ }
436+ }});
421437 // =========================================================================
422438 });
423439 /* ]]> */
424-</script>
440+</script>
425441 <form action="<?php echo JRoute::_('index.php?option=com_content&a_id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm">
426442 <div class="btn-group" style="float: right; height: 35px;">
427- <button class="btn btn-primary btn-sm" style="width: 100px" type="submit" name="task" value="zost_article.save"><?php echo(JText::_("JSAVE")); ?></button>
428- <button class="btn btn-primary btn-sm" style="width: 100px" type="submit" name="task" value="zost_article.saveAndClose">Salvar e Fechar</button>
429- <button class="btn btn-primary btn-sm" style="width: 100px" type="submit" name="task" value="zost_article.cancel" formnovalidate="formnovalidate"><?php echo(JText::_("JCANCEL")); ?></button>
443+<?php
444+if (!is_null($this->item->id)) { // Apenas se estivermos editando o botão "Apply" deve aparecer
445+?>
446+ <button class="btn btn-primary btn-sm" style="width: 100px" type="submit" name="task" value="article.apply">Aplicar</button>
447+<?php
448+}
449+?>
450+ <button class="btn btn-primary btn-sm" style="width: 100px" type="submit" name="task" value="article.save"><?php echo(JText::_("JSAVE")); ?></button>
451+ <button class="btn btn-primary btn-sm" style="width: 100px" type="submit" name="task" value="article.cancel" formnovalidate="formnovalidate"><?php echo(JText::_("JCANCEL")); ?></button>
430452 </div>
431453 <ul class="nav nav-tabs" id="<?php echo($this->tab_name) ?>-tabs">
432454 <li class="nav-item"><a class="nav-link active small" data-toggle="tab" href="#<?php echo($this->tab_name) ?>-tab-1"><?php echo(JText::_('COM_CONTENT_ARTICLE_CONTENT')); ?></a></li>
--- trunk/Leia-me.txt (revision 103)
+++ trunk/Leia-me.txt (revision 104)
@@ -2,4 +2,4 @@
22 2. A pasta "Projetos" contém todos os projetos responsáveis por gerar o site como se conhece. Verifique os arquivos
33 leia-me dentro desta pasta para mais informações
44 3. A pasta "Projetos\Componentes" contém o componente de exemplo Zost (com_zost) que demonstra como criar um componente Joomla, incluindo o entendimento de controllers e tasks
5-4. A pasta "Projetos\Controladores" contém overrides de controladores do Joomla, pois não é possível sobrescrever controladores normalmente. Leia o arquivo leia-me.txt dentro da pasta para saber mais
\ No newline at end of file
5+4. A pasta "Projetos\Sobreposições" contém overrides de controladores do Joomla, pois não é possível sobrescrever controladores normalmente. Leia o arquivo leia-me.txt dentro da pasta para saber mais
\ No newline at end of file
Show on old repository browser