Blocos PHP

  • Identifique-se para criar novos tópicos neste fórum
  • Visitantes anônimos não podem postar neste fórum
Celso Goya  Iniciante De: São Paulo - SP - Brasil  Postagens: 0

Pessoal,

Quero saber se mais alguém usa ou usou blocos com códigos PHP?

Tentei fazer um teste acessando o objeto $xoopsUser, mas infelizmente isso gera um erro, mesmo sendo um objeto público e criado logo no início do programa.

Alguém saberia dizer quais são as restrições para este tipo de bloco?

Eu consigo fazer blocos simples, como para mostrar uma frase aleatória, mas isso que eu queria não deu certo.

[]'s.
Celso Goya.
Moinho.net

Claudia Antonini Vitiello Callegari  Participativo De: Guarulhos - São Paulo - Brasil  Postagens: 74

Oki escreveu:
Pessoal,

Quero saber se mais alguém usa ou usou blocos com códigos PHP?

Tentei fazer um teste acessando o objeto $xoopsUser, mas infelizmente isso gera um erro, mesmo sendo um objeto público e criado logo no início do programa.

Alguém saberia dizer quais são as restrições para este tipo de bloco?

Eu consigo fazer blocos simples, como para mostrar uma frase aleatória, mas isso que eu queria não deu certo.

[]'s.
Celso Goya.
Moinho.net

Ola Oki,

Eu ainda não usei código PHP em bloco, mas já tentou dar um global $xoopsUser?

Abraços.
Claudia

Celso Goya  Iniciante De: São Paulo - SP - Brasil  Postagens: 0

Claudia,

Tentei sim, mas não deu certo, parece que ele entende o global como se fosse uma declaração de variável convencional. Aparentemente me parece que o código que vai no bloco não é capaz de enxergar outros objetos. Imagino que ele deva ser executado separadamente.

De fato permanece a incógnita, porque não entendi como que este recurso funciona, acho que o caminho então será o debug.

[]'s.
Celso Goya.
Moinho.net

Fernando  Iniciante   Postagens: 3

Fala Oki!
Dá para você fazer o que você quiser nos blocos do Xoops! Até se você quiser criar um bloco que Plante milho e depois faça a colheita, é possível.
Você só tem que ficar atento em declarar como globais os objetos públicos que você for usar.
Se você colocar isso no bloco (na intenção de pegar o e-mail do user):
Echo $xoopsUser->getVar('email');
Vai dar erro na certa, agora se fizer assim:
Global $xoopsUser;
Echo $xoopsUser->getVar('email');
Funfará direitinho.
Exemplo (Vamos fazer um bloquinho que dá boas vindas person alizadas):
Global $xoopsUser, $xoopsConfig;
If ($xoopsUser){
Echo "".$xoopsUser->getVar('uname')."! Seja bem-vindo de novo ao ".$xoopsConfig['sitename'];
}else{
Echo "Seja bem-vindo ao ".$xoopsConfig['sitename']."!";
}
Outro exemplo (vamos conectar à Base de Dados agora):
Global $xoopsUser,$xoopsDB;

If($xoopsUser){
$sql = "SELECT count(*) FROM ".$xoopsDB->prefix('users');
List($count) = $xoopsDB->fetchRow($xoopsDB->queryF($sql));
Echo "Nosso portal tem $count Membros.
";

$sql = "SELECT count(*) FROM ".$xoopsDB->prefix('users')." WHERE level.
=0";
List($count) = $xoopsDB->fetchRow($xoopsDB->queryF($sql));
Echo "$count: Inativos.
";
}

Só lembrando à quem estiver lendo que não se deve colocar nos blocos! E não esqueçam de definir o tipo do bloco (Content Type) como PHP SCRIPT.

Celso Goya  Iniciante De: São Paulo - SP - Brasil  Postagens: 0

Fernando,

Descobri qual foi o erro. Eu adicionei as TAGS e ?>

Se tiro as tags, funciona perfeitamente, entretanto com as tags. Nada feito.

Muito boa esta dica, eu tentei e não consegui, então como estava com pressa, acabei fazendo isso em uma página simples no cjaycontent, porém, utilizar o PHP no código do bloco é muito mais organizado e simples.

[]'s.
Celso Goya.
Moinho.net

Gislaine  Ocasional   Postagens: 36

Agora depois de tudo isto, vamos colocar um exemplo prático aqui no fórum e mostrar para comunidade isto acontecendo.
Quem vai no carreto ? Claudia, Oki, topet?

Claudia Antonini Vitiello Callegari  Participativo De: Guarulhos - São Paulo - Brasil  Postagens: 74

Ok!
Criei um bloco e inseri o exemplo do topet:

Global $xoopsUser, $xoopsConfig;
If ($xoopsUser){
Echo "".$xoopsUser->getVar('uname')."! Seja bem-vindo de novo ao ".$xoopsConfig['sitename'];
}else{
Echo "Seja bem-vindo ao ".$xoopsConfig['sitename']."!";
}

Reparem na página principal , o bloco a esquerda.
Se não era para inserir , tiro logo.

Abraços.
Claudia.

Gislaine  Ocasional   Postagens: 36

Ok!
Criei um bloco e inseri o exemplo do topet:

Global $xoopsUser, $xoopsConfig;
If ($xoopsUser){
Echo "".$xoopsUser->getVar('uname')."! Seja bem-vindo de novo ao ".$xoopsConfig['sitename'];
}else{
Echo "Seja bem-vindo ao ".$xoopsConfig['sitename']."!";
}

Reparem na página principal , o bloco a esquerda.
Se não era para inserir , tiro logo.

Abraços.
Claudia

Tira não, era esta mesma a ideia para ver o exemplo funcionando, ehehe.

mauricio  Iniciante   Postagens: 2

acho bom anotar isso para o tema do XOOPS.

Fernando  Iniciante   Postagens: 3

Ok!
Criei um bloco e inseri o exemplo do topet:

Global $xoopsUser, $xoopsConfig;
If ($xoopsUser){
Echo "".$xoopsUser->getVar('uname')."! Seja bem-vindo de novo ao ".$xoopsConfig['sitename'];
}else{
Echo "Seja bem-vindo ao ".$xoopsConfig['sitename']."!";
}

Reparem na página principal , o bloco a esquerda.
Se não era para inserir , tiro logo.

Abraços.
Claudia

Muito Bom!
Mas acredito que seja preciso configurar o bloco para ser visualizado por visitantes também... caso contrário, não tem necessidade de definir um "else..." .

Gislaine  Ocasional   Postagens: 36

já vamos ver isto.

Celso Goya  Iniciante De: São Paulo - SP - Brasil  Postagens: 0

Fernando e claudia,

Sabem que embora eu use o XOOPS a bastante tempo, sempre optei por construir meus próprios blocos e isso me trouxe diversas novas ideias para aplicar no XOOPS.

Boa parte das solicitações de hacks do pessoal podem ser resolvidas usando este método, que na minha opinião é bem mais limpo do que um hack efetivamente.

Embora saiba que o código será interpretado e etecetéra. Este formato torna viável a construção de alguns widgets muito interessantes, como aqueles que encontramos às vezes nos nukes da vida.

Vou pensar em alguns prá construir por aqui e disponibilizar para o pessoal.

Além do fato de que a maioria dos utilizadores XOOPS, tem portais de baixa visitação que não necessitam de excesso de cuidados com este tipo de coisa.

[]'s.
Celso Goya.
Moinho.net

Gislaine  Ocasional   Postagens: 36

Poderia dar uma sugestão para isto?

Como sabem, já foram disponibilizado diversos grupos para os utilizadores. Assim, acredito que este exemplo seria ótimo para fazermos uns bloquinhos onde fosse mostrado os grupos e seus utilizadores, mas separados e não juntos em sequência.

Por Exemplo:

Admins.
------
Nome avatar.
Nome avatar.

Outros itens qualquer.
---------------------

Moderadores.
-----------
Nome avatar.
Nome avatar.

E assim vai.
E colocariamos um limete de 10 por exemplo para cada um.

Assim seriam diversos blocos personalizados com códigos PHP para mostrar os membros. Acredito que iria ficar legal, porque pode colocar os admins do lado esquerdo, os moderadores do lado direito, colaboradores, editores, etc.

Será que vira?

Observação: A montagem seria feita em um array bidirecional com 2 celulas de valores, nome e do avatar. Mas pode ser de outra maneira. Esta é a ideia.
Obrigado

Fernando  Iniciante   Postagens: 3

Excelente essa sua ideia Oki!
Legal disponibilizarmos os Hacks em formato de arquivo para o pessoal copiar e colar dentro de um novo bloco.
Lembrando para quem for fazer um Hack para um MÓDULO desta forma citada pelo Oki, é legal antes verificar se o módulo está instalado, procedendo como abaixo:

//Vamos Verificar se o módulo de notícias está instalado!
$Meumódulo = XoopsModule::getByDirname("news");
//Abaixo, verifica se o módulo NÃO está instalado ou ativo.
If( !$Meumódulo || !$Meumódulo->getVar('isactive') ){
Echo "O Módulo de Notícias não está instalado ou não está Ativo!";
}else{
Echo "O Módulo de Notícias está instalado e ativo! Então eu faço meu bloco a partir daki.";
}

Lembrando que neste caso, o nome do módulo não é case sensitive, ou seja, XoopsModule::getByDirname("news") e XoopsModule::getByDirname("NEWS") vão funcionar normalmente.

E eu sei que não é muito útil, mas se algum doido quiser fazer um Hack em que o user que estiver vendo o bloco deve ter acesso administrador de certo módulo, deve-se fazer:
global $xoopsUser;
If ($xoopsUser){
//Vamos Verificar se o módulo de notícias está instalado!
$Meumódulo = XoopsModule::getByDirname("news");
//Abaixo, verifica se o módulo NÃO está instalado ou ativo.
If( !$Meumódulo || !$Meumódulo->getVar('isactive') ){
Echo "O Módulo de Notícias não está instalado ou não está Ativo!";
//Abaixo verifica se o Usuário NÃO é administrador do módulo.
}elseif ( !$xoopsUser->isAdmin($Meumódulo->mid()) ) {
Echo $xoopsUser->getVar('uname') . ", Você ainda não tem acesso administrativo ao módulo de notícias";
} else {
Echo $xoopsUser->getVar('uname') . ", você é um dos administradores do módulo de notícias. E é daqui que começo o meu Hack.";
}
}

Contem comigo para qualquer ajuda!

Fernando  Iniciante   Postagens: 3

camarada escreveu:
Poderia dar uma sugestão para isto?

Como sabem, já foram disponibilizado diversos grupos para os utilizadores. Assim, acredito que este exemplo seria ótimo para fazermos uns bloquinhos onde fosse mostrado os grupos e seus utilizadores, mas separados e não juntos em sequência.

Por Exemplo:

Admins.
------
Nome avatar.
Nome avatar.

Outros itens qualquer.
---------------------

Moderadores.
-----------
Nome avatar.
Nome avatar.

E assim vai.
E colocariamos um limete de 10 por exemplo para cada um.

Assim seriam diversos blocos personalizados com códigos PHP para mostrar os membros. Acredito que iria ficar legal, porque pode colocar os admins do lado esquerdo, os moderadores do lado direito, colaboradores, editores, etc.

Será que vira?

Observação: A montagem seria feita em um array bidirecional com 2 celulas de valores, nome e do avatar. Mas pode ser de outra maneira. Esta é a ideia.
Obrigado

Muito interessante! Neste caso, o melhor seria fazer uma classe para ser reaproveitada em diversos blocos, fazendo assim um para cada grupo que o usuário quiser... porque nem todos os portais tem grupos de colaboradores, ou editores, etc... e os grupos são identificados no database por seu código, logo , o código 2 de um pode ser Users Registrados, e do outro pode ser outra coisa... para ficar dinâmico, seria uma classe que terminasse assim:

ExibeGrupos($codigo_do_grupo , $numero_de_users_a_mostrar)

Gostei... deixa eu ver aqui o que posso fazer... se tiver sugestão, ou alguém tiver outra visão (algo mais fácil e/ou simples) que diga logo, please.

[Editado]
Dúvida de última hora:
O número de users no bloco seria baseado em que? No número de postagens dele? É que seria meio injusto um "colaborador" aparecer no bloco e outro não... a não ser que fosse randômico ou rolante (ocupa um espaço definido e vai rolando infinitamente para cima, mas é 1/2 complicado).

Gislaine  Ocasional   Postagens: 36

Dúvida de última hora:
O número de users no bloco seria baseado em que? No número de postagens dele? É que seria meio injusto um "colaborador" aparecer no bloco e outro não... a não ser que fosse randômico ou rolante (ocupa um espaço definido e vai rolando infinitamente para cima, mas é 1/2 complicado).

Só randômico está valendo, o importante é definir o limite de utilizadores a ser mostrado em cada um. Vai que o cara manda 100 no bloco. Mas deixa eu te mostrar o porque disto em MP, porque este portal é privatico e lá vou informar a senha e acesso.
Ai você pode colocar as observações aqui.Feliz

Fernando  Iniciante   Postagens: 3

Então taí o que você queria... bola rolando no Maracanã...rs.
Veja se é isso que você quer (se não for, eu vou chorar muito, porque deu um trampo..rs)
No seu Bloco, defina o Content Type como PHP Script e coloque a seguinte função:

function ExibeGrupos ($grupoNome,$numero)
{
Global $xoopsUser;
$conecta =& Database::getInstance();
$myts =& MyTextSanitizer::getInstance();
$result = $conecta->query("SELECT u.uid, u.uname, u.email, u.user_viewemail, u.user_avatar, g.name AS groupname FROM ".$conecta->prefix("groups_users_link")." l LEFT JOIN ".$conecta->prefix("users")." u ON l.uid=u.uid LEFT JOIN ".$conecta->prefix("groups")." g ON l.groupid=g.groupid WHERE g.name='".$grupoNome."' ORDER BY RAND() limit ".$numero."");
If ($conecta->getRowsNum($result) > 0) {
Echo '';
$o_grupo = 0;
While ($utilizadores = $conecta->fetchArray($result)) {
If ($o_grupo == 0){
Echo'';
$o_grupo = 1;
}
If ($xoopsUser != '') {
Echo'';
}else{
If ($utilizadores['user_viewemail']) {
Echo'';
}else{
Echo'';
}
}
}
Echo'
'.$myts->htmlSpecialChars($utilizadores['groupname']).'

'.$myts->htmlspecialchars($utilizadores['uname']).'

'.$myts->htmlspecialchars($utilizadores['uname']).'

'.$myts->htmlspecialchars($utilizadores['uname']).'
 
';

}else{
Echo 'O grupo selecionado não existe ou não contém nenhum membro.';
}
}

Esta função respeira os mesmos padrões do bloco do Sistema, se o Usuário estiver logado, mostra o endereço para mensagem privada, se não, verifica se o Usuário que consta no grupo autorizou a exibição do e-mail, se sim, mostra endereço "mailto:...", se não, deixa em branco (é tanto se se se se se re sese).
Como utilizar a função:
Echo ExibeGrupos("Nome_do_Grupo","Numero_de_Utilizadores")
Ou seja, cole a função e logo depois, chame-a do jeito citado acima. Lembrando que isto não foi 100% testado (mas acho que foi aprovado lá no xoops.org) e lembrando também que o nome do grupo NÃO precisa ser case sensitive.
(Hehehehe, nem coloquei créditos, nem comentei nada para ficar mais clean. Mas se quem estiver interessado em versão comentada das coisas que faço, dá um toke. Daki a poko esses "hackizinhus" tão voando pelos xoops[$i] da vida...rs)
Dúvidas, sugestões ou xingamentos, estamos aeeeee!

Gislaine  Ocasional   Postagens: 36

Uauuuuuuuuuuu, fala animalllllllllll.

Este é o 3zóios, agora vamos ver esta parada funcionando.
Claudia pode fazer as honras, vamos adicionar membros dentro dos grupos definidos conforme ficou combinado na reunião.

Já temos responsaveis por setores da comunidade assim, vamos ver como vai ficar esta encrenca.

Parabéns Fernando, funcionando ou não, acerta quem tenta, quem não faz, já errou.

Excelente.Feliz

Observação: Sobre documentar.
Vamos documentar passo a passo depois de implementado com exemplos e screenshots, isto será da hora, pode esperar.
Dai vai para artigos com honras de estado, ehehehe.

Fernando  Iniciante   Postagens: 3

camarada escreveu:
Uauuuuuuuuuuu, fala animalllllllllll.

Este é o 3zóios, agora vamos ver esta parada funcionando.
Claudia pode fazer as honras, vamos adicionar membros dentro dos grupos definidos conforme ficou combinado na reunião.

Já temos responsaveis por setores da comunidade assim, vamos ver como vai ficar esta encrenca.

Parabéns Fernando, funcionando ou não, acerta quem tenta, quem não faz, já errou.

Excelente.Feliz

Observação: Sobre documentar.
Vamos documentar passo a passo depois de implementado com exemplos e screenshots, isto será da hora, pode esperar.
Dai vai para artigos com honras de estado, ehehehe.

Muito obrigado, fico feliz que gostou...
Já testei aqui e está funcionando sim (senão nem publicaria, rs).
Quem estiver enfrentando problemas (apesar de que a ideia de fazer uma função foi justamente para não ter problemas para implementar), avise que eu vou dar suporte pessoalmente na residência da pessoa! rs.
Aliás, até mesmo você pode pegar o seu XOOPS offline que você usa aí no seu micro para testes, criar um bloco, colar a função e chama-la fazendo mostrar o grupo admin ou o visitantes cadastrados. Lembrando que é o NOME DO GRUPO que conta e tem que estar corretamente digitado (independente de maiúsculas e minúsculas).
Espero novas ideias e VAMU TRABAIÁÁÁÁ

Gislaine  Ocasional   Postagens: 36

Poxa esta ideia deu frutos mesmo.

Agora temos os setores distribuidos no portal, mas podemos levar para a segunda versão, um módulo instalavel.

O maior problema que estou vendo para a implementação disto seria as disposições em diversas áreas do portal como estamos vendo.

Alguém tem ideias para uma implementação disto?

anap  Iniciante   Postagens: 5

Será que dá para dar uma ajudinha a uma novata no ramo? O negócio é o seguinte aproveitei a dica anterior e consegui também ciar o bloco

Fernando escreveu:
Ok!
Criei um bloco e inseri o exemplo do topet:

Global $xoopsUser, $xoopsConfig;
If ($xoopsUser){
Echo "".$xoopsUser->getVar('uname')."! Seja bem-vindo de novo ao ".$xoopsConfig['sitename'];
}else{
Echo "Seja bem-vindo ao ".$xoopsConfig['sitename']."!";
}

Reparem na página principal , o bloco a esquerda.
Se não era para inserir , tiro logo.

Abraços.
Claudia

Muito Bom!
Mas acredito que seja preciso configurar o bloco para ser visualizado por visitantes também... caso contrário, não tem necessidade de definir um "else..." .

Só que gostaria de utilizá-lo na parte superior do portal, mais especificamente embaixo do banner, como está feito aqui nesta página lá no alto. Já estou há muito tentando e não consigo um resultado satisfatório. Se puderem ajudar agradeço.

Ana Paula

Gislaine  Ocasional   Postagens: 36
anap  Iniciante   Postagens: 5

Obrigado,

Deu para resolver o problema numa boa.

  Pesquisa avançada






Entrada

Codinome:


Senha:





Perdeu a senha?  |Cadastre-se!


Quem nos visita
Há 43 visitantes neste momento... (25 na seção Fóruns)

Associados: 0
Anônimos: 43

outros...

Banner XOOPS Cube