Centralização do Administrator do JOOMLA

Seção dedicada à Adaptação ou Desenvolvimento de Scripts para Mambo ou Joomla.
Avatar do usuário
Rosemeire da Silva
Novato
Mensagens: 23
Registrado em: 26 Jan 2007, 07:34

Centralização do Administrator do JOOMLA

Mensagem por Rosemeire da Silva »

Centralização do ADMINISTRATOR do JOOMLA

A idéia da alteração realizada é centralizar o administrador dos site em um único diretório, ou seja, qualquer site criado com o joomla terá a manutenção realizada em um único “Administrator”.

Obs.: Os testes foram realizados localmente e depois transferidos para o servidor.

Primeiramente instalamos o joomla na raiz do htdocs, gerando uma base de dados que chamamos de BANCO_1. Faremos um backup da base gerada para montar a estrutura das demais bases de dados: BANCO_2, BANCO_3.

Alterações

BANCO

No banco de dados BANCO_1, crie uma tabela que conterá todos os sites que irão utilizar o administrator.

Código: Selecionar todos

CREATE TABLE `sites` (
  `banco` varchar(50) NOT NULL default '',
  `site` varchar(200) default NULL,
  `diretorio` varchar(50) default NULL,
  PRIMARY KEY  (`banco`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Insira na tabela os registros:

Código: Selecionar todos

Insert into sites (banco, site, diretorio) values (‘BANCO_1’, ‘SITE 1’, ‘site_1’);
Insert into sites (banco, site, diretorio) values (‘BANCO_1’, ‘SITE 1’, ‘site_1’);
Insert into sites (banco, site, diretorio) values (‘BANCO_1’, ‘SITE 1’, ‘site_1’);
Alterações no arquivo: administrator/template/joomla_admin/login.php

No início do arquivo administrator/template/joomla_admin/login.php acrescentar o código php abaixo:

Código: Selecionar todos

<?php
    Require (‘conexoes.php’);
    Mysql_select_db($database_conexoes, $conexoes);
    $sql = “select banco, site from sites order by site”;
    $res = mysql_query($sql);
    $combo = ‘’;
    While ($ar_site = mysql_fetch_array($res)){
        $combo = $combo.'<option value="'.$ar_site['banco'].'">'.$ar_site['site'].'</option>';
    }
?>
A variável $combo gerada iremos imprimir logo abaixo do input com o name=‘pass’

Código: Selecionar todos

<div class="inputlabel">Site</div>
<div>
  <select name="database" id="database" class="inputbox">
  <?php print $combo; ?>
  </select>
</div>

Alterações no arquivo administrator/index.php

Acrescentar o código abaixo na verificação if (isset( $_POST['submit'] )) {

Código: Selecionar todos

	$bancodados = stripslashes( mosGetParam( $_POST, 'database', NULL ) );
	/* seleciono o diretório para images e doawnloads */
	$query = "select diretorio from sites
              where banco like '".$bancodados."'";
	$database->setQuery( $query );
	$diretorio = $database->loadResult();

	/* conecta novamente o banco de dados */
	$mosConfig_db = $bancodados;
	$database = new database( $mosConfig_host, $mosConfig_user, $mosConfig_password, $mosConfig_db, $mosConfig_dbprefix );
	if ($database->getErrorNum()) {
		$mosSystemError = $database->getErrorNum();
		$basePath = dirname( __FILE__ );
		include $basePath . '/../configuration.php';
		include $basePath . '/../offline.php';
		exit();
	}
	$database->debug( $mosConfig_debug );
	$acl = new gacl_api();
No mesmo arquivo procure pela criação da sessão $_SESSION['session_id'] e adicione o código abaixo acima da criação da sessão:

Código: Selecionar todos

	    $_SESSION['diretorio'] = $diretorio;
                 $_SESSION['bancodados'] = $bancodados;
Alteração no arquivo includes/joomla.php

Neste arquivo procure por $database = new. Altere acrescentando acima da linha o código em negrito abaixo:

Código: Selecionar todos

[b]if (isset($_SESSION['bancodados'])){
  $mosConfig_db = $_SESSION['bancodados'];
}
print 'banco --> '.$mosConfig_db;[/b]
/* conecta ao banco de dados */

$database = new database( $mosConfig_host, $mosConfig_user, $mosConfig_password, $mosConfig_db, $mosConfig_dbprefix );
if ($database->getErrorNum()) {
	$mosSystemError = $database->getErrorNum();
	$basePath = dirname( __FILE__ );
	include $basePath . '/../configuration.php';
	include $basePath . '/../offline.php';
	exit();
}
$database->debug( $mosConfig_debug );
$acl = new gacl_api();


Alteração no arquivo administrator/index2.php

A sessão deve ser inicializada antes de ser incluído o arquivo joomla.php. Procure pelo código:

Código: Selecionar todos

session_name( md5( $mosConfig_live_site ) );
session_start();
Recorte esta inicialização e cole acima do código:

Código: Selecionar todos

require_once( $mosConfig_absolute_path . '/includes/joomla.php' );
Faça o mesmo procedimento nos arquivos:
  • Administrator/index3.php
    Includes/auth.php
Com estas alterações você poderá logar por um unico administrator em qualquer base de dados.
Com as alteração acima as pastas images/stories e images/banners ficam acessível para todos os "BANCOS" sites que utilizarão o administrator. No próximo post quero estar colocando aqui como fazer para que o site acesse somente a pasta pertinente a ele.  ;D

Abraços, espero ter contribuido....
Avatar do usuário
Diogo Magalhães
Super Joomleiro
Mensagens: 1131
Registrado em: 27 Jun 2004, 14:09
Localização: Belo Horizonte
Contato:

Re: Centralização do Administrator do JOOMLA

Mensagem por Diogo Magalhães »

Caramba! Eu sequer entendi isso.
É algo parecido com o JoomFish!?
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
Só respondo questões do fórum no fórum.
Avatar do usuário
Rosemeire da Silva
Novato
Mensagens: 23
Registrado em: 26 Jan 2007, 07:34

Re: Centralização do Administrator do JOOMLA

Mensagem por Rosemeire da Silva »

Não conheço o JoomFish... ???
Quero passar aqui como eu fiz pra centralizar o mambo...
Falta ainda trabalhar a index das páginas para redirecioná-las para a raiz onde estão os arquivos do mambo e templates...
A idéia e passar o BANCO de dados por sessão
Avatar do usuário
Rosemeire da Silva
Novato
Mensagens: 23
Registrado em: 26 Jan 2007, 07:34

Re: Centralização do Administrator do JOOMLA

Mensagem por Rosemeire da Silva »

Uma correção  :)
No arquivo joomla.php onde foi acrescentado o código:

if (isset($_SESSION['bancodados'])){
  $mosConfig_db = $_SESSION['bancodados'];
}
print 'banco --> '.$mosConfig_db;

Para aqueles que estão testando qdo usamos o componente docman, dá erro ao usuário tentar baixar o documento, isso por causa dessa linha;

:o
Responder