• 0
Sign in to follow this  
Digi-Alchemist

Função Para Mostrar Ao Usuário Se Ele Visitou (ou Não) Um Link

Question

Olá!

Lá vai!

func_guests.php

// este código registra um link (no caso, um tópico, mas pode ser qualquer coisa)
// com sua data de última atualização, e armazena isso num cookie do cliente.
//
function register_topic_view($topic_id, $topic_date) {
    global $USER_INFO;
    if ($USER_INFO['uid']>0) {
        $getcookcent = explode_assoc(';','=',$_COOKIE['my_website_views']);
        if ($getcookcent[$topic_id]!=$topic_date) {
            $getcookcent[$topic_id]=$topic_date;
            setcookie('my_website_views', implode_assoc(';','=',$getcookcent), time()+31536000);
        }
    }
}

// esta função verifica se o tópico ou link foi visitado desde sua
// última atualização
//
function was_topic_visited($topic_id, $topic_date) {
    global $USER_INFO;
    if ($USER_INFO['uid']>0) {
        $getcookcent = explode_assoc(';','=',$_COOKIE['my_website_views']);
        if (array_key_exists($topic_id,$getcookcent)) {
            return $getcookcent[$topic_id]==$topic_date;
        } else {
            return false;
        }
    } else {
        return true;
    }
}

// obs.: você pode dar qualquer formato de data. Porém, é recomendado utilizar um timestamp UNIX
// convertido para string. É melhor, mais ágil, mais fácil comparar.

Digi-Alchemist P.S.: As funções explode_assoc() e implode_assoc() são interessantes. Vão abaixo o código:
// converte string em array associativo (desde que gerado pela função
// implode_assoc()
//
function explode_assoc($del1, $del2, $dstr) {
    $result=array();
    $dstrarr = explode($del1, $dstr);
    foreach ($dstrarr as $dstritem) {
        $dstritemarr = explode($del2, $dstritem);
        $result[$dstritemarr[0]]=$dstritemarr[1];
    }
    return $result;
}


// converte array associativo em string
//
function implode_assoc($del1, $del2, $darray) {
    $result='';
    foreach ($darray as $dindex => $dvalue) {
        $result.= $dindex.$del2.$dvalue.$del1;
    }
    return substr($result,0,-1);
}

^~

Edited by Digi-Alchemist

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Olá de novo^~

Eis outra implementação: ao invés de salvarmos os dados de visitação de links atuais num cookie do lado cliente, vamos fazer isso utilizando arquivos de texto do servidor.

func_guests_2.php

// Um diretório separa os arquivos de dados de visitação do resto do site. 
// Se esse diretório não existe, então é criado.
// Esta função registra a visita do usuário ao link. Se o arquivo não existe, cria. 
// 
function register_topic_view($topic_id, $topic_date) {
    global $USER_INFO;
    if ($USER_INFO['uid']>0) {
        if (!is_dir('temp')) {mkdir('temp');}
        $getarqstr = (file_exists("temp/view_t{$USER_INFO['uid']}.txt"))?(implode("",file("temp/view_t{$USER_INFO['uid']}.txt"))):('');
        if ($getarqstr!='') {
            $getcookcent = explode_assoc(';','=',$getarqstr);
            if ($getcookcent[$topic_id]!=$topic_date) {
                $getcookcent[$topic_id]=$topic_date;
                file_put_contents("temp/view_t{$USER_INFO['uid']}.txt", implode_assoc(';','=',$getcookcent));
            }
        } else {
            $getcookcent=array($topic_id=>$topic_date);
            file_put_contents("temp/view_t{$USER_INFO['uid']}.txt", implode_assoc(';','=',$getcookcent));
        }
    }
}

// E esta verifica se o usuário já visitou o link desde sua última atualização (ou não).
//
function was_topic_visited($topic_id, $topic_date) {
    global $USER_INFO;
    if ($USER_INFO['uid']>0) {
        if (!is_dir('temp')) {mkdir('temp');}
        $getarqstr = (file_exists("temp/view_t{$USER_INFO['uid']}.txt"))?(implode("",file("temp/view_t{$USER_INFO['uid']}.txt"))):('');
        if ($getarqstr!='') {
            $getcookcent = explode_assoc(';','=',$getarqstr);
            if (array_key_exists($topic_id,$getcookcent)) {
                return $getcookcent[$topic_id]==$topic_date;
            } else {
                return true;
            }
        } else {
            return true;
        }
    }
}

// OBS.: Estas funções (tanto as de cookie quanto as de arquivo no servidor) foram feitas
// para trabalhar com usuários logados em um site ou fórum.
//

e as funções implode_assoc() e explode_assoc() já foram postadas neste mesmo tópico.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this