Les méthodes AmetysFront.UserPageSubscriptions.subscribePage et AmetysFront.UserPageSubscriptions.unsubscribePage de cet helper permet de respectivement s'abonner ou se désabonner à une page. Elle prenne en arguments l'identifiant de la page et une fonction de callback (optionelle)
Pour le bon fonctionnement du helper, l'élément HTML contenant les boutons pour s'inscrire/désinscrire doit porter l'attribut data-ametys-subscription-page avec l'identifiant de la page.
Lors de l'appel à #subscribePage:
l'élément portant l'attribut data-ametys-subscription-page-role="subscribe" sera caché
l'élément portant l'attribut data-ametys-subscription-page-role="unsubscribe" sera affiché
l'élément portant l'attribut data-ametys-subscription-page-role="nb-subscribers" sera (si il existe) mis à jour avant le nombre d'abonné à la page
Exemple d'intégration
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
<div class="page-follow" data-ametys-subscription-page="{ametys:pageId()}">
<button title="Suivre la page" onclick="AmetysFront.UserPageSubscriptions.subscribePage('{ametys:pageId()}', updateSubscriptionCb)"
data-ametys-subscription-page-role="subscribe" type="button" class="unfollowed">
<span class="text">Suivre la page</span>
<span data-ametys-subscription-page-role="nb-subscribers" class="number"></span>
</button>
<button style="display: none;" title="Ne plus suivre la page"
onclick="AmetysFront.UserPageSubscriptions.unsubscribePage('{ametys:pageId()}', updateSubscriptionCb)" data-ametys-subscription-page-role="unsubscribe" type="button"
class="followed">
<span class="text">Page suivie</span>
<span class="number">
<span data-ametys-subscription-page-role="nb-subscribers"></span>
</span>
</button>
<script>
function updateSubscriptionCb(pageId, data)
{
let $wrapper = $j('[' + AmetysFront.UserPageSubscriptions.SUBSCRIPTION_PAGE_ATTR + '="' + pageId + '"]');
if (data.nbSubscribers == 0)
{
$wrapper.find(AmetysFront.UserPageSubscriptions.NB_SUBSCRIBERS_PAGE_SELECTOR).hide();
}
else
{
$wrapper.find(AmetysFront.UserPageSubscriptions.NB_SUBSCRIBERS_PAGE_SELECTOR).show();
}
}
$j(document).ready(function () {
AmetysFront.UserPageSubscriptions.getSubscriptions("<xsl:value-of select="ametys:pageId()"/>", updateSubscriptionCb);
// Mark as read
AmetysFront.UserPageSubscriptions.markPageAsRead("<xsl:value-of select="ametys:pageId()"/>");
});
</script>
</div>
<div class="page-follow" data-ametys-subscription-page="{ametys:pageId()}">
<button title="Suivre la page" onclick="AmetysFront.UserPageSubscriptions.subscribePage('{ametys:pageId()}', updateSubscriptionCb)"
data-ametys-subscription-page-role="subscribe" type="button" class="unfollowed">
<span class="text">Suivre la page</span>
<span data-ametys-subscription-page-role="nb-subscribers" class="number"></span>
</button>
<button style="display: none;" title="Ne plus suivre la page"
onclick="AmetysFront.UserPageSubscriptions.unsubscribePage('{ametys:pageId()}', updateSubscriptionCb)" data-ametys-subscription-page-role="unsubscribe" type="button"
class="followed">
<span class="text">Page suivie</span>
<span class="number">
<span data-ametys-subscription-page-role="nb-subscribers"></span>
</span>
</button>
<script>
function updateSubscriptionCb(pageId, data)
{
let $wrapper = $j('[' + AmetysFront.UserPageSubscriptions.SUBSCRIPTION_PAGE_ATTR + '="' + pageId + '"]');
if (data.nbSubscribers == 0)
{
$wrapper.find(AmetysFront.UserPageSubscriptions.NB_SUBSCRIBERS_PAGE_SELECTOR).hide();
}
else
{
$wrapper.find(AmetysFront.UserPageSubscriptions.NB_SUBSCRIBERS_PAGE_SELECTOR).show();
}
}
$j(document).ready(function () {
AmetysFront.UserPageSubscriptions.getSubscriptions("<xsl:value-of select="ametys:pageId()"/>", updateSubscriptionCb);
// Mark as read
AmetysFront.UserPageSubscriptions.markPageAsRead("<xsl:value-of select="ametys:pageId()"/>");
});
</script>
</div>
<div class="page-follow" data-ametys-subscription-page="{ametys:pageId()}">
<button title="Suivre la page" onclick="AmetysFront.UserPageSubscriptions.subscribePage('{ametys:pageId()}', updateSubscriptionCb)"
data-ametys-subscription-page-role="subscribe" type="button" class="unfollowed">
<span class="text">Suivre la page</span>
<span data-ametys-subscription-page-role="nb-subscribers" class="number"></span>
</button>
<button style="display: none;" title="Ne plus suivre la page"
onclick="AmetysFront.UserPageSubscriptions.unsubscribePage('{ametys:pageId()}', updateSubscriptionCb)" data-ametys-subscription-page-role="unsubscribe" type="button"
class="followed">
<span class="text">Page suivie</span>
<span class="number">
<span data-ametys-subscription-page-role="nb-subscribers"></span>
</span>
</button>
<script>
function updateSubscriptionCb(pageId, data)
{
let $wrapper = $j('[' + AmetysFront.UserPageSubscriptions.SUBSCRIPTION_PAGE_ATTR + '="' + pageId + '"]');
if (data.nbSubscribers == 0)
{
$wrapper.find(AmetysFront.UserPageSubscriptions.NB_SUBSCRIBERS_PAGE_SELECTOR).hide();
}
else
{
$wrapper.find(AmetysFront.UserPageSubscriptions.NB_SUBSCRIBERS_PAGE_SELECTOR).show();
}
}
$j(document).ready(function () {
AmetysFront.UserPageSubscriptions.getSubscriptions("<xsl:value-of select="ametys:pageId()"/>", updateSubscriptionCb);
// Mark as read
AmetysFront.UserPageSubscriptions.markPageAsRead("<xsl:value-of select="ametys:pageId()"/>");
});
</script>
</div>
Modifier les préférences d'abonnement aux pages
Pour modifier les préférences d'abonnements aux pages dans le service "Mes pages suivies", le helper JS suivant doit être importé
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
La méthodeAmetysFront.UserPageSubscriptions.unsubscribe(uniqueId, subscriptionId, callback, skipConfirm)permet de supprimer l'abonnement à une page.
Les arguments sont:
uniqueId: identifiant unique permettant l’identifier l'élément HTML contenant l'ensemble des abonnements aux pages
subscriptionId: identifiant de l'abonnement
callback (optionnel): fonction de retour à appeler après la désinscription
skipConfirm (option): true pour ne pas afficher un message de confirmation avant la suppression
A la fin de l'appel, si un élément HTML avec l'attribut data-ametys-subscription-id="[subscriptionId]" existe il sera supprimé.
Modifier les préférences de notification
La méthode AmetysFront.UserPageSubscriptions.editSubscription(uniqueId, subscriptionId, frequency, broadcastChannels, callback) permet de modifier les préférences d'un abonnement de page.
Les arguments sont:
uniqueId: identifiant unique permettant l’identifier l'élément HTML contenant l'ensemble des abonnements aux pages
subscriptionId: identifiant de l'abonnement
frequency: fréquence de l'abonnement (DAILY, WEEKLY ou MONTHLY)
broadcastChannels: canaux de diffusion (EMAIL, INTRANET)
callback (optionnel): fonction de retour à appeler après la modification
A la fin de l'appel, si un élément HTML avec l'attribut data-ametys-subscription-id="[subscriptionId]" existe:
si un sous-élément avec data-ametys-subscription-page-role="frequency" existe, il sera mis à jour avec le libellé de la nouvelle fréquence (ex: "une fois par semaine")
si un sous-élément avec data-ametys-subscription-page-role="smart-frequency" existe, il sera mis à jour avec le libellé complet de la nouvelle fréquence (ex: "Hebdomadaire, chaque lundi à 10h)
Exemple
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
<li data-ametys-subscription-id="{$subscriptionId}" class="abonnement-item">
<div class="infos">
<a href="{resolver:resolve('page', page/@id, false)}"><xsl:value-of select="page"/></a>
</div>
<div class="actions">
<button onclick="openMenu" aria-label="Ouvrir le menu" aria-expanded="false" type="button">
<i class="far fa-chevron-down"></i>
</button>
<div class="action-modal" style="display: none;">
<ul>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', null, ['SITE'])"
type="button">
Aucune alerte mail
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'DAILY', ['SITE', 'MAIL'])"
type="button">
Une fois par jour
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'WEEKLY', ['SITE', 'MAIL'])"
type="button">
Une fois par semaine
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'MONTHLY', ['SITE', 'MAIL'])"
type="button">
Une fois par mois
</button>
</li>
<li>
<button onclick="AmetysFront.UserPageSubscriptions.unsubscribe('{$uniqueId}', '{$subscriptionId}')" type="button">
Supprimer
</button>
</li>
</ul>
</div>
<span data-ametys-subscription-page-role="frequency">Une fois par jour</span>
</div>
</li>
<li data-ametys-subscription-id="{$subscriptionId}" class="abonnement-item">
<div class="infos">
<a href="{resolver:resolve('page', page/@id, false)}"><xsl:value-of select="page"/></a>
</div>
<div class="actions">
<button onclick="openMenu" aria-label="Ouvrir le menu" aria-expanded="false" type="button">
<i class="far fa-chevron-down"></i>
</button>
<div class="action-modal" style="display: none;">
<ul>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', null, ['SITE'])"
type="button">
Aucune alerte mail
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'DAILY', ['SITE', 'MAIL'])"
type="button">
Une fois par jour
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'WEEKLY', ['SITE', 'MAIL'])"
type="button">
Une fois par semaine
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'MONTHLY', ['SITE', 'MAIL'])"
type="button">
Une fois par mois
</button>
</li>
<li>
<button onclick="AmetysFront.UserPageSubscriptions.unsubscribe('{$uniqueId}', '{$subscriptionId}')" type="button">
Supprimer
</button>
</li>
</ul>
</div>
<span data-ametys-subscription-page-role="frequency">Une fois par jour</span>
</div>
</li>
<li data-ametys-subscription-id="{$subscriptionId}" class="abonnement-item">
<div class="infos">
<a href="{resolver:resolve('page', page/@id, false)}"><xsl:value-of select="page"/></a>
</div>
<div class="actions">
<button onclick="openMenu" aria-label="Ouvrir le menu" aria-expanded="false" type="button">
<i class="far fa-chevron-down"></i>
</button>
<div class="action-modal" style="display: none;">
<ul>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', null, ['SITE'])"
type="button">
Aucune alerte mail
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'DAILY', ['SITE', 'MAIL'])"
type="button">
Une fois par jour
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'WEEKLY', ['SITE', 'MAIL'])"
type="button">
Une fois par semaine
</button>
</li>
<li>
<button
onclick="AmetysFront.UserPageSubscriptions.editSubscription('{$uniqueId}', '{$subscriptionId}', 'MONTHLY', ['SITE', 'MAIL'])"
type="button">
Une fois par mois
</button>
</li>
<li>
<button onclick="AmetysFront.UserPageSubscriptions.unsubscribe('{$uniqueId}', '{$subscriptionId}')" type="button">
Supprimer
</button>
</li>
</ul>
</div>
<span data-ametys-subscription-page-role="frequency">Une fois par jour</span>
</div>
</li>
Récupérer les pages non lues
Les pages non lues sont les pages suivies par l'utilisateur courant, ayant été mises à jour et non consultées par l'abonné depuis leur dernière mise à jour.
Pour récupérer les pages non lues (et les signaler par exemple par un point rouge), vous aurez besoin du même helper
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
La méthode AmetysFront.UserPageSubscriptions.getUnreadPages(selector, callback) permet de récupérer les pages non lues
Les arguments sont:
selector: sélecteur jquery permettant d'identifiant l'élément HTML contenant la liste des pages suivies
callback: (optionnel) function de retour à appeler. La fonction reçoit un tableau des pages non lues avec pour chacune d'elle l'identifiant, le titre, l'auteur de la mise à jour et la date de dernière mise à jour.
A la fin de l'appel, chaque l'élément HTML avec l'attribut data-ametys-page-notification-id correspond à l'identifiant d'une page non lue sera affiché et mis à jour avec:
si un sous-élément avec data-ametys-page-notification-role="date" existe, il sera mis à jour avec la date de dernière mise à jour
si un sous-élément avec data-ametys-page-notification-role="author-name" existe, il sera mis à jour avec le nom de l'auteur de la mise à jour
si un élément <img data-ametys-page-notification-role="author-img"/> existe, son attribut "src" sera mis à jour avec l'url de l'avatar de l'auteur de la mise à jour
Exemple permettant la mise à jour automatique de notification de page
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.