Ir para conteúdo
Fórum Script Brasil
  • 0

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


Digi-Alchemist

Pergunta

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);
}

^~

Editado por Digi-Alchemist
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...