AMP

Aggiunta di un commento

A questo punto, l'utente può aggiungere un commento utilizzando la libreria amp-form. Si noti come la presenza del modulo sia condizionale, a seconda dello stato del componente amp-access:

<form amp-access="loggedIn" amp-access-hide method="post" action-xhr="<%host%>/samples_templates/comment_section/submit-comment-xhr" target="_top">

Specifichiamo un metodo POST e un'azione XHR, poiché le azioni non XHR non sono consentite con i metodi POST in AMP. Poiché questo è un demo, non consentiamo commenti permanenti, ma è possibile aggiungere solo un commento alla volta; ogni volta che viene aggiunto un commento, il server AMPByExample restituisce una risposta JSON contenente il testo inserito con alcune aggiunte, come il timestamp, un avatar e un nome per l'utente.

Ecco l'esempio di una risposta JSON:

{"Datetime":"09:34:21",
"User":"Charlie",
"Text":"Hello!",
"UserImg":"/img/ic_account_box_black_48dp_1x.png"}

Il componente modulo mostrerà semplicemente quei valori all'interno della pagina usando il modello amp-mustache:

<div submit-success>
  <template type="amp-mustache">
    <div class="comment-user">
      <amp-img width="44" class="user-avatar" height="44" alt="user" src=""></amp-img>
      <div class="card comment">
        <p><span class="user">{{User}}</span><span class="date">{{Datetime}}</span></p>
        <p>{{Text}}</p>
      </div>
    </div>
  </template>
</div>

In questo esempio, ci limitiamo a controllare che il valore del commento non sia vuoto; se il valore è vuoto, restituiamo un errore che causa l'esecuzione del codice seguente

<div submit-error>
  <template type="amp-mustache">
    Error! Looks like something went wrong with your comment, please try to submit it again.
  </template>
</div>

In più, aggiungiamo anche l'attributo required per forzare la presenza del testo di commento prima di consentirne l'invio:

<input type="text" class="data-input" name="text" placeholder="Your comment..." required>

Aggiungendo un commento e facendo clic sul pulsante Invia, si dovrebbe vedere qualcosa di simile al seguente screenshot: