Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ximnes

lógica

Recommended Posts

Boa tarde rapaziada.

Olha só, estou desenvolvendo o site do meu selo de gravação musical, especializado em RAP.

Estou com o layout pronto,
Faz tempo que não programo PHP e estou me atualizando para fazer o portal direito. Sem gambiarras como costumava fazer hehe.

A questão é que estou botando no papel todas as idéias e conteúdos para desenvolver de forma organizada.

Então vou explicar melhor as minhas idéias e ficaria feliz se pudessem me dar um suporte, mandando alguns links de certos tutoriais. Eu andei procurando porém mesmo assim tenho minhas dúvidas.

Eu estou escrevendo as tabelas do banco de dados e estou pensando em uma forma de integrá-las de forma certa e simples.

As tabelas:

tb_artists

- artist_id (int) 5

- artist_type varchar 15 (aqui será definido se o artista é mc, beatmaker, etc)

- artist_since int 4 (desde que ano o artista faz parte do selo)

- artist_aka varchar 30 (codinome do artista)

- artist_aka_url varchar 30 (tratamento para url amigável ex: Nome do Artista -> nome-do-artista)

- artist_release longtext (release do artista)

- artist_email_login ..

- artist_password_login ...

tb_albums

- artist_id

- artist_aka

- artist_aka_url

- album_id (bigint) 255

- album_type (varchar) 20 (que tipo de álbum, se é um EP, uma Beat Tape, um álbum completo etc..)

- album_title (varchar) 40

- album_title_url

....

tb_albums_content

- artist_id

- album_id

- album_track_id (bigint) 255

- album_track_type (varchar) 20 (se é um single, etc)

- album_track_number (número da track do cd)

- album_track_title e track_title_url

- album_track_participation_id, part_aka, part_aka_url

- album_track_producer_id, prod_aka, prod_aka_url

- album_track_link

....

tb_main_content

content_id (bigint) 255

album_id

album_track_id

content_status (int) 1 (1 ativo 0 inativo)

content_highlight (int) 1 ( " )

content_type (se é notícia, novidade etc)

content_date

....

as dúvidas começam exatamente assim.

na página do artista quero relacionar as últimas 10 notícias relacionadas a ele, porém na tabela não relaciono o artista, seria necessário por algum campo pra relacionar? existe alguma forma de select que busque o artista em algum campo, sem precisar estar relacionado?

alguns produtores do selo não tem albuns próprios, porém produziram certas faixas de algum mc do selo, tem um campo na tb_albums_content que se chama album_track_producer_aka.

usaria um if para ver se o artist_type é artista e faria uma busca na tb_albums_content e não própriamente na tb_albums, porém há produtores que produziram faixas de outros cds, e que também tem cds próprios, e essa coluna(album_track_producer_aka) seria preenchida a cada track com o produtor, isso seria um problema porque listaria 2 vezes. se usasse um if para isso seria mais uma condição e mais uma nova consulta.

na página relacionada a certo produtor, quero buscar um thumb do(s) cd(s) que ele tenha produzido nem que seja uma faixa, porém ele fará a busca no conteúdo das faixas do cd e não propriamente na tb_albums, claro que tem um campo chamado album_id na tb_albums_content, porém teria que resgatar essa ID e fazer uma nova busca na tb_albums.

existe alguma outra forma de fazer essa busca?

eu criei um sisteminha aqui que funciona mais fica complicado e tenho certeza que dá para fazer mais simples e funcional.

segue o código.

Página artistMain.php onde se lista os artistas:

<?php $conPDO = new PDO($dsn_db, $user_db,$pass_db); ?>
<a href="<?php echo $PHP_SELF; ?>">principal</a> > artistas<br>
<ul id"" class="">
<?php
    $sqlArtists = 'SELECT * FROM tb_artists ORDER BY artist_aka ASC LIMIT 10';
    $sqlArtistsPDO = $conPDO->query($sqlArtists);
        while($rowArtistsPDO = $sqlArtistsPDO->fetchObject()) {
            echo "<li>";
        echo "<h3><a href=\"". $PHP_SELF ."/artist/" . $rowArtistsPDO->artist_aka_url . "/\">" . $rowArtistsPDO->artist_aka . "</a></h3>";
            echo "</li>";
        }
$conPDO = null;
?>
</ul> 

pag artistContent.php

<?php $conPDO = new PDO($dsn_db, $user_db,$pass_db); ?>
<?php
    $sqlArtistCount = $conPDO->prepare('SELECT COUNT(*) FROM tb_artists WHERE artist_aka_url = :artistAKA');
    $sqlArtistCount->execute(
                array(
                ':artistAKA' => $_REQUEST['aka_url']
                )
                     );
    $resArtistCount = $sqlArtistCount->fetchColumn();
    if($resArtistCount == false){
                    echo "Não foi possível abrir a página solicitada";
            } else {
    echo "<a href=\"". $PHP_SELF ."\"/>principal</a> > <a href=\"". $PHP_SELF ."/artists/\">artistas</a> > ";
    $sqlArtistAKA = $conPDO->prepare('SELECT artist_aka , artist_aka_url , artist_type FROM tb_artists WHERE artist_aka_url = :artistAKA');
    $sqlArtistAKA->execute(
                array(
                ':artistAKA' => $_REQUEST['aka_url']
                )
                     );
    $sqlArtistAKA = $sqlArtistAKA->fetchObject();
    $artistType = $sqlArtistAKA->artist_type;
    echo "<a href=\"". $PHP_SELF ."/artist/" . $sqlArtistAKA->artist_aka_url . "/\">" . $sqlArtistAKA->artist_aka . "</a>";
    echo " > catálogo<br>";
    ?>
<?php
    if($artistType == "Producer"){
    $sqlProducerAlbumCount = $conPDO->prepare('SELECT COUNT(*) FROM tb_albums WHERE artist_aka_url = :artistAKA');
    $sqlProducerAlbumCount->execute(
                array(
                ':artistAKA' => $_REQUEST['aka_url']
                )
                     );
    $resProducerAlbumCount = $sqlProducerAlbumCount->fetchColumn();
    if($resProducerAlbumCount == false){
    ?>
Faixas Produzidas:<br>
    <table width="595" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Música</td>
<td width="85">Lançado em</td>
<td width="87">Selo</td>
<td width="119">Registro</td>
</tr>
<?php
$sqlCatalogProducerPDO = $conPDO->prepare('SELECT * FROM tb_albums_content WHERE album_track_producer_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogProducerPDO->execute(
                     array(
                     ':artistAKA' => $_REQUEST['aka_url']                        
                         )
                         );
                        
while($rowCatalogProducerPDO = $sqlCatalogProducerPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogProducerPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/\">" . $rowCatalogProducerPDO->album_title . "</a></td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/" . $rowCatalogProducerPDO->album_track_title_url . "/\">" . $rowCatalogProducerPDO->album_track_title . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_track_producer_aka . "</td>";
echo "<td></td>";
echo "<td></td>";
echo "</tr>";
}
    ?>
</table>
<?php
    } else {
    ?>
Álbums:<br>
    <table width="595" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Tipo</td>
<td width="85">Lançado em</td>
<td width="87">Selo</td>
<td width="119">Registro</td>
</tr>
<?php
$sqlCatalogProducerPDO = $conPDO->prepare('SELECT * FROM tb_albums WHERE artist_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogProducerPDO->execute(
                     array(
                     ':artistAKA' => $_REQUEST['aka_url']                        
                         )
                         );
                        
while($rowCatalogProducerPDO = $sqlCatalogProducerPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogProducerPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/\">" . $rowCatalogProducerPDO->album_title . "</a></td>";
echo "<td>" . $rowCatalogProducerPDO->album_type . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_date . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_label . "</td>";
echo "<td>" . $rowCatalogProducerPDO->album_registry . "</td>";
echo "</tr>";
    ?>
<?php
    }
    ?>
</table>

Faixas Produzidas:<br>
    <table width="595" border="1" cellspacing="0" cellpadding="0">
<tr align="center">
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Música</td>
</tr>
<?php
$sqlCatalogProducerPDO = $conPDO->prepare('SELECT * FROM tb_albums_content WHERE album_track_producer_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogProducerPDO->execute(
                     array(
                     ':artistAKA' => $_REQUEST['aka_url']                        
                         )
                         );
                        
while($rowCatalogProducerPDO = $sqlCatalogProducerPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogProducerPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/\">" . $rowCatalogProducerPDO->album_title . "</a></td>";
    if($rowCatalogProducerPDO->album_track_participation_aka == null){
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/" . $rowCatalogProducerPDO->album_track_title_url . "/\">" . $rowCatalogProducerPDO->album_track_title . "</td>";
    } else {
    echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogProducerPDO->artist_aka_url . "/release/" . $rowCatalogProducerPDO->album_id . "/" . $rowCatalogProducerPDO->album_title_url . "/" . $rowCatalogProducerPDO->album_track_title_url . "/\">" . $rowCatalogProducerPDO->album_track_title . " (Part. " . $rowCatalogProducerPDO->album_track_participation_aka . ")</td>";
}
echo "</tr>";
}
    ?>
</table>

<?php
}
} else { ?>
Álbums:<br>
    <table width="595" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="91">Artista</td>
<td width="114">Título</td>
<td width="85">Tipo</td>
<td width="85">Lançado em</td>
<td width="87">Selo</td>
<td width="119">Registro</td>
</tr>
<?php
$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums WHERE artist_aka_url = :artistAKA ORDER BY album_id DESC LIMIT 10');
/*$sqlCatalogArtistPDO = $conPDO->prepare('SELECT * FROM tb_albums, tb_albums_content
LEFT OUTER JOIN tb_albums_content ON (tb_albums.artist_aka = tb_albums_content.album_track_producer)');*/
$sqlCatalogArtistPDO->execute(
                     array(
                     ':artistAKA' => $_REQUEST['aka_url']                        
                         )
                         );
                        
while($rowCatalogArtistPDO = $sqlCatalogArtistPDO->fetchObject()) {
echo "<tr>";
echo "<td>" . $rowCatalogArtistPDO->artist_aka . "</td>";
echo "<td><a href=\"". $PHP_SELF ."/artist/" . $rowCatalogArtistPDO->artist_aka_url . "/release/" . $rowCatalogArtistPDO->album_id . "/" . $rowCatalogArtistPDO->album_title_url . "/\">" . $rowCatalogArtistPDO->album_title . "</a></td>";
echo "<td>" . $rowCatalogArtistPDO->album_type . "</td>";
echo "<td>" . $rowCatalogArtistPDO->album_date . "</td>";
echo "<td>" . $rowCatalogArtistPDO->album_label . "</td>";
echo "<td>" . $rowCatalogArtistPDO->album_registry . "</td>";
echo "</tr>";
    ?>
<?php
    }
    ?>
</table>
<?php
}
}
?>

<?php
$conPDO = null;
?>

Ainda é um "Beta" pois estou tendo idéias e vendo formas de implementar.

Sei muito, muito pouco MESMO de OOP.

Acham que precisaria saber disso pra conseguir desenvolver esse portal direito?

Algum artigo? tutorial? apostila?

Eu li bastante já, porém entendo somente as que eu vejo.

Não consigo desenvolver uma Classe nem uma Função realmente funcional para resolver meus problemas.

Desculpem o post gigante.

Agradeço a quem ler, e mais ainda a quem puder dar uns pitacos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia separar o código php do html, já ajudaria a compreender melhor este código.

 

Sei muito, muito pouco MESMO de OOP.

Mas onde neste código tem OOP, tirando a Biblioteca PDO que já é nativa, o restante no code é procedural!

 

Pesquise pelo Pattern DAO "Data Access Object", acredito que seja o padrão mais fácil para aprender a desenvolver em Oo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Williams, muito obrigado.

Eu desenvolvi esse código, para começar a pensar em como desenvolver as classes e funções.

Eu compreendo e consigo utilizar classes e funções que já existem, o problema é criar as minhas próprias funções para resolver os meus problemas.

 

Você acha que valeria a pena eu desenvolver com frameworks?

Pelo que eu entendo e leio, eles já tem classes e funções sub desenvolvidas para utilizar.

Eu andei pensando e vi aqui no fórum mesmo, uma classe e função de conexão com PDO com função de select insert e etc, que acho que já simplificaria o código.

 

A maior dificuldade que eu tenho, é em compreender como deixar o código simples e fazer as consultas no BD sem precisar fazer tantas consultas.

Por exemplo:
No caso do artista ser do tipo produtor, eu faria a busca nos álbums, se ele tiver um album próprio mostra-se uma tabela(html) com as imagens do cd desse produtor.

e logo após mostra uma outra tabela com albums que ele produziu (sem ser a do cd dele próprio, pois ele produziu todas as tracks do cd dele) alguma música de outros artistas, pois se não preencheria os dados dessa tabela com o próprio cd, e ficaria uma confusão.

E se ele não tiver cd próprio, só mostrar essas músicas que ele tenha produzido do cd dos artistas(isso é fácil.)

 

A questão maior é essa, pois sei que as tabelas estão tendo como integrá-las.

 

Desculpa se estiver confuso de entender.

 

Vou pesquisar o DAO apesar de já ter lido alguns artigos, não consegui compreender de forma clara.

Acha que tem alguma coisa que eu possa ler antes de entrar de cabeça na DAO?

 

Grande abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você acha que valeria a pena eu desenvolver com frameworks?

Você já conhece bem a sintaxe do PHP o que já é um ponto positivo, acredito que já possa ir direto para um framework, mas antes estudar um pouco dos conceitos da OPP

 

Na minha opinião, os mais fáceis em questões de suporte, aprendizagem e geração de camadas, mas existe outros mais badalados.

 

http://cakephp.org/

http://laravel.com/

http://www.codeigniter.com/

http://www.symfony-project.com/

 

 

A maior dificuldade que eu tenho, é em compreender como deixar o código simples e fazer as consultas no BD sem precisar fazer tantas consultas.

Por exemplo:

No caso do artista ser do tipo produtor, eu faria a busca nos álbums, se ele tiver um album próprio mostra-se uma tabela(html) com as imagens do cd desse produtor.

e logo após mostra uma outra tabela com albums que ele produziu (sem ser a do cd dele próprio, pois ele produziu todas as tracks do cd dele) alguma música de outros artistas, pois se não preencheria os dados dessa tabela com o próprio cd, e ficaria uma confusão.

Suas tabelas já estão bem estruturadas, dentro dos padrões de Normalização de Banco de Dados, eu só faria alguns ajustes como por exemplo criar sua FK,s pelo Navicat habilitando alguns recursos como On Delete, mas mesmo assim, você faz tranquilamente essas consultas utilizando Joins como você mesmo disse facilitando as consultas e economia de memória.

 

Sobre Dao, acredito que seja mais fácil para pegar os conceitos de OOP, pegando a tabela tb_artists, no codigo abaixo, já esta criado seus objetos "um espelho da tabela", facilitando a integração da views com a camada de controle DaoArtists

Pesquise também sobre Injeção de Dependência vai te ajudar muito
class Artists {

    public $artist_id;
    public $artist_type;
    public $artist_since;
    public $artist_aka;
    public $artist_aka_url;
    public $artist_release;
    public $artist_email_login;
    public $artist_password_login;

    /**
     * @param mixed $artist_aka
     */
    public function setArtistAka($artist_aka)
    {
        $this->artist_aka = $artist_aka;
    }

    /**
     * @return mixed
     */
    public function getArtistAka()
    {
        return $this->artist_aka;
    }

    /**
     * @param mixed $artist_aka_url
     */
    public function setArtistAkaUrl($artist_aka_url)
    {
        $this->artist_aka_url = $artist_aka_url;
    }

    /**
     * @return mixed
     */
    public function getArtistAkaUrl()
    {
        return $this->artist_aka_url;
    }

    /**
     * @param mixed $artist_email_login
     */
    public function setArtistEmailLogin($artist_email_login)
    {
        $this->artist_email_login = $artist_email_login;
    }

    /**
     * @return mixed
     */
    public function getArtistEmailLogin()
    {
        return $this->artist_email_login;
    }

    /**
     * @param mixed $artist_id
     */
    public function setArtistId($artist_id)
    {
        $this->artist_id = $artist_id;
    }

    /**
     * @return mixed
     */
    public function getArtistId()
    {
        return $this->artist_id;
    }

    /**
     * @param mixed $artist_password_login
     */
    public function setArtistPasswordLogin($artist_password_login)
    {
        $this->artist_password_login = $artist_password_login;
    }

    /**
     * @return mixed
     */
    public function getArtistPasswordLogin()
    {
        return $this->artist_password_login;
    }

    /**
     * @param mixed $artist_release
     */
    public function setArtistRelease($artist_release)
    {
        $this->artist_release = $artist_release;
    }

    /**
     * @return mixed
     */
    public function getArtistRelease()
    {
        return $this->artist_release;
    }

    /**
     * @param mixed $artist_since
     */
    public function setArtistSince($artist_since)
    {
        $this->artist_since = $artist_since;
    }

    /**
     * @return mixed
     */
    public function getArtistSince()
    {
        return $this->artist_since;
    }

    /**
     * @param mixed $artist_type
     */
    public function setArtistType($artist_type)
    {
        $this->artist_type = $artist_type;
    }

    /**
     * @return mixed
     */
    public function getArtistType()
    {
        return $this->artist_type;
    }
	
}

Para criar sua conexão com do DB, faça uso do Pattern Registry

 

Mais sobre:

 

http://forum.imasters.com.br/topic/400014-resolvidopdo-singleton/

http://forum.imasters.com.br/topic/463107-pdo-registry-design-pattern-phpoo/

Code

 

Conexão

<?php
$database = new DATABASE_CONFIG();

try {

	//Estãncia a Registry
	$registry = Registry::getInstance();
	$options = array(
		PDO::ATTR_PERSISTENT => true,
		PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
		PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
	);

	$dsn = sprintf( 'mysql:host=%s;dbname=%s;', $database->default['host'], $database->default['database'] );

	$pdo = new PDO( $dsn, $database->default['login'], $database->default['password'], $options);

	//Setando a registry pdo
	$registry->set( 'PDO' , $pdo );

} catch (PDOException $e) {

	exit ($e->getMessage());

}

Seus bancos

 

<?php

class DATABASE_CONFIG {

	public $default = array(

		'host' => 'localhost',
		'login' => 'root',
		'password' => '123456',
		'database' => 'seu_banco',

	);
	
	public $test = array(

		'host' => 'localhost',
		'login' => 'root',
		'password' => '123456',
		'database' => 'test',

	);

}

Registry

 

 

<?php
/**
 * Exemplo de Registry
 */
class Registry {

    /**
     * Instância única de Registry
     * @var Registry
     */
    private static $instance;

    /**
     * Nosso registro
     * @var ArrayObject
     */
    private $storage;

    /**
     * Registry é um caso de uso de Singleton
     */
    protected function __construct() {
        $this->storage = new ArrayObject();
    }

    /**
     * Recupera um registro utilizando sua chave
     * @param string $key
     * @return mixed O valor armazenado
     * @throws RuntimeException Se não houver um registro para a chave especificada
     */
    public function get($key) {
        if ($this->storage->offsetExists($key)) {
            return $this->storage->offsetGet($key);
        } else {
            throw new RuntimeException(sprintf('Não existe um registro para a chave "%s".', $key));
        }
    }

    /**
     * Recupera a instância única de Registry
     * @return Registry
     */
    public static function getInstance() {
        if (!self::$instance)
            self::$instance = new Registry();

        return self::$instance;
    }

    /**
     * Registra um valor à uma chave
     * @param string $key A chave que será utilizada no registro
     * @param mixed $value O valor que será registrado
     * @throws LogicException Se a chave já estiver registrada
     */
    public function set($key, $value) {
        if (!$this->storage->offsetExists($key)) {
            $this->storage->offsetSet($key, $value);
        } else {
            throw new LogicException(sprintf('Já existe um registro para a chave "%s".', $key));
        }
    }

    /**
     * Remove o registro de uma chave específica
     * @param string $key A chave que será removida
     * @throws RuntimeException Se não houver um registro para a chave especificada
     */
    public function unregister($key) {
        if ($this->storage->offsetExists($key)) {
            $this->storage->offsetUnset($key);
        } else {
            throw new RuntimeException(sprintf('Não existe um registro para a chave "%s".', $key));
        }
    }

}

Com esses links e code você faz qualquer coisa.

 

Boa Sorte! :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que isso Williams! Valeu pela aula meu camarada.

To lendo sobre o Code Igniter, ele parece bem simples e bem robusto.

Eu entrei no seu site antes de postar essas dúvidas.

To quase pegando esse curso aí hehehe.

 

muito obrigado mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

:thumbsup:

O curso é de um dos moderadores aqui do fórum de PHP, e que tenho admiração e respeito.

Beraldo

Pode adquirir sem medo! :thumbsup: :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Re-interando, eu li dois artigos que me deram uma luz,

http://www.sistemabasico.com.br/2012/02/22/aprenda-facil-oop-php5-programacao-orientada-objeto-parte1/

http://www.sistemabasico.com.br/2012/02/23/programacao-orientada-a-objeto-oop-php-5-parte-2/

pra quem quiser uma luz acredito que esses ajudem.

O problema realmente é na hora de executar uma classe complexa, porém a paciência tem que ser grande.

 

No Code Igniter eu teria que fazer as classes de conectar(ex: a singleton que você mandou) ou ele já possui isso?

Desculpe a sobrecarga de informações e dúvidas, e muito obrigado a paciência para responder.

 

abraço


:thumbsup:

O curso é de um dos moderadores aqui do fórum de PHP, e que tenho admiração e respeito.

Beraldo

Pode adquirir sem medo! :thumbsup: :thumbsup:

Verdade não tinha me ligado no nome.

Peço desculpas a ele e você pelo mal entendido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No Code Igniter eu teria que fazer as classes de conectar(ex: a singleton que você mandou) ou ele já possui isso?

Todos já possuem, o que torna o desenvolvimento mais rápido.

 

No console do cakephp, um simples comando cake bake, a view, model e controlador de uma tabela já é criada automaticamente, evitando ter que escrever linha por linha. :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abraços!!!!

 

Willians muito, muito obrigado cara.

O Code Igniter é bem interessante.

Executando as coisas nele dá pra entender bem de OOP.

Consegui desenrolar bastante coisa já.

 

Eu procurei e achei somente os tutoriais que vem no próprio manual. Sabe se tem alguns outros?

Nóss!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba Williams.

Sem palavras meu amigo.

 

Olha a diferença de código. Ainda to estudando porém to desenvolvendo.

É MUITO prático. muito mesmo.

Artists_model.php

<?php
class Artists_model extends CI_Model {
	
        public function __construct()
        {
                $this->load->database();
        }
		public function get_artist($artist_aka_url = FALSE)
{
        if ($artist_aka_url === FALSE)
        {
                $query = $this->db->get('tb_artists');
                return $query->result_array();
        }

        $query = $this->db->get_where('tb_artists', array('artist_aka_url' => $artist_aka_url));
        return $query->row_array();
}
		public function get_albums($artist_aka_url)
{
				$query = $this->db->get_where('tb_albums', array('artist_aka_url' => $artist_aka_url));
       			return $query->row_array();
}
		public function get_tracks($artist_aka_url)
{
				$query = $this->db->get_where('tb_albums_content', array('album_track_producer_aka_url' => $artist_aka_url));
				return $query->row_array();
				
}

}

<?php
class Artists extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this->load->model('artists_model');
        }

		public function index()
		{
        $data['artists'] = $this->artists_model->get_artist();
        $data['title'] = 'Artistas';

        $this->load->view('templates/header', $data);
        $this->load->view('artists/index', $data);
        $this->load->view('templates/footer');
		}

		public function view($artist_aka_url = NULL)
		{
        $data['rowArtist'] = $this->artists_model->get_artist($artist_aka_url);
		
		$data['rowAlbums'] = $this->artists_model->get_albums($artist_aka_url);
			$data['rowTrack'] = $this->artists_model->get_tracks($artist_aka_url);
			
			
        if (empty($data['rowArtist']))
        {
                show_404();
        }
		
        $data['title'] = $data['rowArtist']['artist_aka'];

        $this->load->view('templates/header', $data);
        $this->load->view('artists/view', $data);
        $this->load->view('templates/footer');
		}
}

Artists.php (controller)

<?php
class Artists extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this->load->model('artists_model');
        }

		public function index()
		{
        $data['artists'] = $this->artists_model->get_artist();
        $data['title'] = 'Artistas';

        $this->load->view('templates/header', $data);
        $this->load->view('artists/index', $data);
        $this->load->view('templates/footer');
		}

		public function view($artist_aka_url = NULL)
		{
        $data['rowArtist'] = $this->artists_model->get_artist($artist_aka_url);
		
		$data['rowAlbums'] = $this->artists_model->get_albums($artist_aka_url);
			$data['rowTrack'] = $this->artists_model->get_tracks($artist_aka_url);
			
			
        if (empty($data['rowArtist']))
        {
                show_404();
        }
		
        $data['title'] = $data['rowArtist']['artist_aka'];

        $this->load->view('templates/header', $data);
        $this->load->view('artists/view', $data);
        $this->load->view('templates/footer');
		}
}

artits/index.php

<h2><?php echo $title ?></h2>
<ul>
<?php foreach ($artists as $rowArtist): ?>

        
		<li>
        <a href="./artist/<?php echo $rowArtist['artist_aka_url'] ?>"><?php echo $rowArtist['artist_aka'] ?></a>
        </li>

<?php endforeach ?>

artists/view.php

<?php


	echo "<ul id=\"artistMenu\">";
	echo "Mais opções:";
	echo "<li>";
	echo "» <a href=\"./artist/" . $rowArtist['artist_aka_url'] . "/releases/\">Lançamentos</a>";
	echo "</li>";
	echo "» <a href=\"./artist/" . $rowArtist['artist_aka_url'] . "/photos/\">Fotos</a>";
	echo "</li>";
	echo "<li>";
	echo "» <a href=\"./artist/" . $rowArtist['artist_aka_url'] . "/contacts/\">Contatos</a>";
	echo "</li>";
	echo "</ul>";
    echo "<h1>" . $rowArtist['artist_aka'] . "</h1>";
	echo "<i>:: " . $rowArtist['artist_type'] . " - na MUB desde: " . $rowArtist['artist_since'] . "</i>";
	echo "<br>";
	$artist_release = nl2br($rowArtist['artist_release']);
	echo $artist_release;
	echo "<br>";
	$artist_type = $rowArtist['artist_type'];
	if($artist_type == "Producer"){
	if($rowAlbums > 0){
	echo "Álbums:<br>";
	echo $rowAlbums['album_title'] . " - " . $rowAlbums['album_type'] . " - " . $rowAlbums['album_date'] . "<br>";
	}
	if($rowTrack > 0) {
	echo "Faixas Produzidas:<br>";
	echo $rowTrack['album_title'] . " - " . $rowTrack['album_track_number'] . " - " . $rowTrack['album_track_title'];
	}
	if($artist_type == "MC"){
	echo "Álbums:<br>";
	echo $rowAlbums['album_title'] . " - " . $rowAlbums['album_type'] . " - " . $rowAlbums['album_date'];
	}
	} 

SEM palavras. ou 100 palavras.

 

Teria programado dessa forma a muito mais tempo se tivesse me ligado na praticidade e funcionalidade que a OOP trás.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show, bem melhor que procedural rss

 

No inicio fiz alguns testes com CI, mas pelo fato de ele pertencer a uma empresa "EllisLab" e não a uma comunidade aberta, e rumores de descontinuação do Framework na época, acabei indo para outros, hoje desenvolvo mais em cima do CakePHP e estudando o Palcon e Laravel, mas devido as Novas Melhorias do Cake na 3.0 devo ainda continuar com ele, sei lá kkkkkk.


O palcon é show a parte, de uma olhada

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou dar uma olhada aqui.

Me interessei no Cake PHP porém essa questão de programar olhando o DOS ou algo do tipo acho que tornaria meu trabalho e entendimento mais complexo rsrs.

Mas derrepente mais pra frente vou tentar migrar pra um mais robusto.

Primeiro meu entendimento de OOP e lógica de programação tem que estarem mais avançados.

 

To empacado numa função.

To usando where artist_aka_url

e preciso pegar o ID do album pra fazer a pesquisa na tabela de imagems com thumbs dos cds.

to me enrolando demais. tentei o join e etc mas não consigo resgatar o ID pra relacionar uma tabela e outra.

 

por EX

		public function get_albums_covers($artist_aka_url)
{	
				$query = $this->db->select('album_id')
                        ->from('tb_albums')
                        ->join('tb_albums_images', 'album_id = album_id_images')
                        ->where( array('artist_aka_url' => $artist_aka_url) )
                        ->get()->result();
						
				$query = $this->db->get_where('tb_albums_images' , array('album_id_images',$album_id));
       			return $query;
    }

Sei que não estou setando o $album_id aqui, até por que não sei se é aí nessa função que eu setaria ou no view.

O Join que eu fiz me traria o ID pra fazer a nova consulta?

Essa lógica que ainda não consegui sacar.

A questão das tracks se o produtor não tiver um CD rolou legal, porém a consulta sempre foi no artist_aka_url.

 

Eu tentei já por o get_album_covers($album_id) e também não rolou.

Acho que retorna array a consulta JOIN porém não consegui entender.

 

Odeio quando empaca o cód kkk

 

 

A lógica que eu tenho em mente é a seguinte, abrir a página do artista e usar o artist_aka_url pra setar todas as funções.

 

mas na função de get_covers pra recuperar thumbs dos CDS, vou precisar buscar pelo ID do album.

se o artista for produtor, e não tiver cds, preciso buscar as thumbs do cd das faixas que ele produziu.

acredito que através de ID também, pois na tb_albums_contents contem o ID do album, e a informação do produtor da musica.

 

Porém puxar o ID dentro da função que não to sacando.

 

Complicado essas mentes que complicam mais ainda kkk.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você quer puxar todos os dados de uma tabela filha, e somente se aqueles dados existirem use left join

->join('tb_albums_images', 'album_id = album_id_images', 'left')

Senão vai ter que passar o id para uma nova função, para poder trazer aqueles dados e listar em outro loop


Uma dica é ir depurando a query e ir testando as consultas, até pegar o jeito do framework

 

Acho que no CI é

$this->output->enable_profiler(TRUE);

ou

print_r($query);

https://ellislab.com/codeigniter/user-guide/general/profiling.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verdade. tinha esquecido do left. O problema é que eu não to assimilando a forma de dar um ECHO e atribuir o valor para o src da imagem.

 

To pensando aqui, derrepente essa query tenha que entrar na que exibe os albums, e não criar uma nova.

		public function get_albums($artist_aka_url)
{				
				$query = $this->db->get_where('tb_albums', array('artist_aka_url' => $artist_aka_url));
       			return $query->result_array();
}

Putz, desatenção total.

		public function get_albums_covers($artist_aka_url)
{				$query = $this->db->select('album_id')
                ->from('tb_albums')
                ->join('tb_albums_images', 'album_id = album_id_images', 'left')
                ->where( array('artist_aka_url' => $artist_aka_url) )
                			->get()->result();
							return $query;
						
    }

o problema é que ainda não envia os valores.

 

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion

Filename: artists/view.php

Line Number: 25

Backtrace:

o pior é que to tentando fazer de todas as formas exibir mas nemhuma volta.

Praticamente virado lendo os artigos do code igniter.

fiquei feliz de conseguir compreender melhor uma nova forma de desenvolver, pelo menos pra mim, claro hehehe..

Abraço Williams, foi mal te pertubar aí com tantas confusões mentais kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu William.

Dei um jeito aqui, tava invertendo a tabela. falta de atenção.

Mas ainda não entendi muito bem como funciona, to dando uma lida aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eai Williams para não abrir um novo tópico, resolvi por aqui mesmo.

Olha só cara travei numa lógica aqui danada.

To fazendo um sistema de news e quero por upload de imagens também.

Só que eu fico pensando aqui, eu teria que upar a imagem antes pra depois sim por no codigo(to usando o tinymce).

Então eu teoricamente não precisaria de uma tabela para executar isso, certo?

Mas a minha dúvida é fazer o upload e pegar o link pra por no tinymce sacou?

Pra ficar bonito teria que usar um ajax né?

 

abraçoo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.