Drobne modyfikacje
Wyniki 1 do 4 z 4

Temat: Drobne modyfikacje

  1. #1
    Debiutant
    Dołączył
    18-09-2007
    Wpisy
    3
    Punkty
    10

    Domyślny Drobne modyfikacje

    Nie wiem czy w tym miejscu można umieścić swoje sugestie ale spróbuje.

    Moim zdaniem w pliku libraries//joomla/factory.php

    kod źródłowy ok lini 445

    $options = array(
    'db' => &$db,
    'db_table_prefix' => $db->getPrefix() . 'core_acl_',
    'debug' => 0
    );


    powinien wyglądać

    $options = array(
    'db' => &$db,
    'db_table_prefix' => '#__' . 'core_acl_',
    'debug' => 0
    );

    ponieważ jest funkcja odpowiedzialna za zmianę prefiksu '#__' na odpowiedni dla danej instalacji a mianowicie /libraries/joomla/database/database.php

    function replacePrefix( $sql, $prefix='#__' )

    wówczas budując most pomiędzy dwoma joomlami można wpisać następujący kod w tej funkcji zamiast istniejącego kodu a co w efekcie daje możliwość korzystania z tych samych użytkowników w obu joomlach pod warunkiem że jest to na jednej bazie danych i w tym przypadku źródłowymi tabelami są tabele z prefiksem 'jos_'.


    function replacePrefix( $sql, $prefix='#__' )
    {
    $sql = trim( $sql );

    $tab_sql = explode('#__',$sql);
    $literal = $tab_sql[0];

    for ($i=1;$i<count($tab_sql);$i++)
    {
    if (ereg("contact_details",$tab_sql[$i]) ||
    ereg("users",$tab_sql[$i]) ||
    ereg("usertypes",$tab_sql[$i]) ||
    ereg("core_acl_aro",$tab_sql[$i]) ||
    ereg("core_acl_groups_aro_map",$tab_sql[$i]) ||
    ereg("core_acl_aro_groups",$tab_sql[$i]) ||
    ereg("core_acl_aro_sections",$tab_sql[$i]) ||
    ereg("session",$tab_sql[$i]))
    {
    $literal .= "jos_".$tab_sql[$i];


    }
    else $literal .= $this->_table_prefix.$tab_sql[$i];

    }
    return $literal;

    }

    Dodatkowa sugestia tyczy się budowy tabel z strukturą drzewiastą

    np.

    CREATE TABLE `jos_core_acl_aro_groups` (
    `id` int(11) NOT NULL auto_increment,
    `parent_id` int(11) NOT NULL default '0',
    `name` varchar(255) NOT NULL default '',
    `lft` int(11) NOT NULL default '0',
    `rgt` int(11) NOT NULL default '0',
    `value` varchar(255) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `parent_id_aro_groups` (`parent_id`),
    KEY `jos_gacl_parent_id_aro_groups` (`parent_id`),
    KEY `jos_gacl_lft_rgt_aro_groups` (`lft`,`rgt`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;

    jak zauważyłem usuwanie elementów z tej tabeli jest zrobione programowo
    gdzie łatwo można zastąpić to wykorzystując mechanizm mysql

    chodzi o stworzenie pierwszego elementu o indeksie 0

    INSERT INTO `jos_core_acl_aro_groups` VALUES (0, null, 'Korzen', 1, 22, 'Korzen');

    i kolejne elementy
    INSERT INTO `jos_core_acl_aro_groups` VALUES (17, 0, 'ROOT', 1, 22, 'ROOT');
    INSERT INTO `jos_core_acl_aro_groups` VALUES (28, 17, 'USERS', 2, 21, 'USERS');
    ...

    i nadanie relacji

    alter table jos_core_acl_aro_groups add CONSTRAINT `par_own_fk` FOREIGN KEY (`parent_id`) REFERENCES `jos_core_acl_aro_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

    Pierwszy element pozwala na dodanie referencji ( oczywiście klucz 'parent_id ' musi przybierać wartości null i nie może być innego użycia parent_id jako indeksu i tabela jak wiadomo innodb).

    W efekcie usuwając dowolny element usuwamy wszystkich potomków.

  2. Pani Reklamowa
    Pani Reklamowa jest aktywna
    Avatar Panny Google

    Dołączył
    19-08-2010
    Skąd
    Internet
    Postów
    milion
    Pochwał
    setki
  3. #2
    Wyjadacz nexus246 awatar
    Dołączył
    23-09-2005
    Wpisy
    664
    Punkty
    20

    Domyślny

    Jeśli o klucze obce i kaskadowe usuwanie to sądzę że chodzi o tyb tabel - MyISAM z tego co pamiętam nie obsługuje kluczy obcych.

    Pomysł na modyfikację jest bardzo ciekawy, przetestowałeś już?
    Witaminy | Ziołolecznictwo
    "Paczem" do "komentarzów" jest odpowiedni komponent.
    --
    Mój priv to nie helpdesk.

  4. #3
    Debiutant
    Dołączył
    18-09-2007
    Wpisy
    3
    Punkty
    10

    Domyślny Re

    Typ tabel innodb i testowalem to już. Zrobilem sobie menu z zapisem id i parent_id i title prosta tabela i oczywiście po usunięciu jakiegokolwiek elementu wszystkie powiązania zostają również usunięte.

  5. #4
    Debiutant
    Dołączył
    18-09-2007
    Wpisy
    3
    Punkty
    10

    Domyślny re

    Chodzi tu o sam fakt wstawienia referencji (parent_id) na ta samą tabele ale na klucz główny (id).

Reguły pisania

  • Nie możesz zakładać nowych tematów
  • Nie możesz dodawać wypowiedzi
  • Nie możesz dodawać załączników
  • Nie możesz poprawiać swoich postów
  •