web-dev-qa-db-fra.com

Comment montrer l'article dynamique aux utilisateurs non enregistrés?

J'ai un article dynamique à Joomla.

Les informations de l'article sont extraites de Fabrik lorsque l'utilisateur est connecté.

Mais lorsque l'utilisateur n'est pas enregistré. Je ne peux pas voir les informations.

L'idée est de créer une URL. Quelque chose de similaire à ceci:

https://qrmenudigital.com/index.php?option=com_content&view=article&id=32&uid=969

ajout de l'article_id et de l'user_id .. qui doit être affiché.

Je veux donner cette URL aux personnes qui ont besoin de voir cet article.

Pour les personnes qui ne sont pas des utilisateurs enregistrés - ils voient l'article.

L'article est un article dynamique et j'ajoute ce code dans PHP pour extraire des données:

{source}<?php
$user = JFactory::getUser();
$userId = $user->get('id');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
//echo $userId;
$query->select($db->quoteName(array('nombre_establecimiento', 'user_id',)))
    ->from($db->quoteName('insertar_logo'))
    ->where($db->quoteName('user_id') . ' = ' . $userId);
$db->setQuery($query);
$results = $db->loadAssocList();
foreach ($results as $rows) {
    echo "<center>";
        //echo "<img src='images/stories/" . $userId . "/image-1.png'>";
        echo "<H1>" . $rows['nombre_establecimiento'] . "</H1>" . "<BR>";
    echo "</center>";
}
?>
{/source}

Si l'utilisateur est connecté, l'article affiche les données.

Mais lorsque j'essaie d'utiliser le lien pour afficher l'article sans l'utilisateur connecté, je ne peux rien voir.

Comment puis-je relier le lien avec l'article si l'utilisateur n'est pas connecté?

1
javier94

Si je comprends votre problème correctement, il vous suffit de modifier les premières lignes de votre code d'origine, car vous ne voulez pas simplement rechercher l'ID utilisateur à partir de la base de données (Table utilisateur), mais vous devez également définir l'identifiant de l'utilisateur à partir du particulier. URL de l'article. Alors essayez-le d'utiliser ce qui suit au début de votre code:

$articleUrl = \Joomla\CMS\Uri\Uri::getInstance();
$segmentUserID = $articleUrl->getVar('uid');

Ainsi, y compris cela dans votre code d'origine, cela devrait ressembler à ce qui suit:

{source}
<?php

$articleUrl = \Joomla\CMS\Uri\Uri::getInstance();
$segmentUserID = $articleUrl->getVar('uid');
//echo $segmentUserID;

$db = JFactory::getDbo();
$query = $db->getQuery(true);    

$query->select($db->quoteName('nombre_establecimiento'))
    ->from($db->quoteName('insertar_logo'))
    ->where($db->quoteName('user_id') . ' = ' . $db->quote($segmentUserID));
$db->setQuery($query);
foreach ($db->loadColumn() as $value) {
    echo "<h1 style=\"text-align:center; margin-bottom: 14px;\">{$value}</h1>";
}
?>    
{/source}

Je n'ai pas examiné les autres parties de votre code, je ne résume que ce problème d'approche pertinent dans votre code concernant l'obtention de l'ID utilisateur du bon endroit (de l'URL). J'espère que je n'ai pas mal compris votre problème et cela vous donnera le résultat attendu et l'ajout apparaîtra dans votre article où il est nécessaire même si le visiteur n'est pas connecté.

quelques notes supplémentaires sur le code d'origine

Je voulais juste inclure peu de notes d'examen sur le code d'origine basées sur @MickMackusa des commentaires très utiles (il a amélioré ces parties du code d'origine):

  1. les valeurs dans le query _ doivent toujours être sécurisées à l'aide de quote($value) en raison de raisons de sécurité.

  2. Étant donné que le user_id Est déjà défini à partir de l'URL, nous n'avons donc pas besoin de sélectionner cela dans la base de données. La sélection de la valeur nombre_establecimiento Regarde suffisamment dans ce cas.

  3. Création d'une nouvelle variable pour le résultat de la requête en tant que $result Est une déclaration de variable inutile (variable à usage unique) - d'alimenter $db->loadAssocList() directement dans la boucle.

  4. Je ne vois pas le point d'utiliser loadAssocList() Comme on dirait que nous aurons une valeur unique de la table. Peut-être que l'OP a un autre but d'utiliser cela ... @MickMackusa a déjà amélioré cette partie du code à l'aide de $db->loadColumn(), merci pour cela!

1
Zollie

Vous devriez d'abord séparer lorsque vous avez un utilisateur de connaisseur d'un invité:

$user = JFactory::getUser();

if ($user->guest) {
    echo "<p>You must login to see the content</p>";
} else {
    // add your code
}

Il n'y a pas de moyen de savoir quel utilisateur est, s'il n'est pas connecté en premier, je pense que le meilleur est de lui montrer un message pour être connecté avant d'avoir accès au contenu.

0
Carlitorweb

merci pour votre réponse.

Peut-être que je n'ai pas expliqué clairement .. L'utilisateur qui voit les informations .. doit être public .. L'utilisateur n'est pas un invité .. ne peut pas se connecter .. Voir les informations.

je génère un lien pour chaque utilisateur enregistré -> Ce lien sera partagé avec les clients ... de sorte que l'idée est avec le lien voir l'article.

par exemple pour l'user_id = 969

https://qrmenudigital.com/index.php?option=com_content&view=article&id=39&uid=969

et avec ce lien .. Le client .. devrait voir l'article_id = 39

J'essaie d'obtenir l'user_id lorsque l'URL est cliquée, avec un code comme celui-ci.

<?php

$ app = jfactory :: gettaplication (); $ uid = $ app-> entrée-> getint ('uid', ''); // $ Query = $ DB-> getquery (vrai); echo $ uid; ?>

avec ce code, j'essaie de mettre dans l'article. À partir de quel utilisateur est l'information que je dois montrer ... Parce que l'utilisateur n'est pas enregistré ... maintenant si vous cliquez sur le lien que vous verrez Afficher l'user_id .. à l'intérieur du article_id = 39 donc la prochaine étape .. vont utiliser php .. essayer d'obtenir les informations que j'ai besoin .. problème est parfois je peux voir, parfois je ne vois pas l'info .. Voyons voir ce qui se passe!

0
javier94