2018-12-14 09:48
Cześć wszystkim, ostatnio stanąłem przed tematem dodania metadanych do starej wersji quick.cart w wersji 4.0 zakładając, że nie trzeba będzie przerabiać istniejących baz danych. Metadane trzeba dodać zarówno będąc na stronie (page) jak i na stronie produktu (products) dla każdego ID osobno. Poniżej pokazuję, jak sobie z tym poradziłem. Tak, wiem, że to jest stara wersja, ale może komuś się jeszcze przyda :) Założenie 1: Ta przeróbka nie daje możliwości edycji nowych plików z poziomu panelu administracyjnego. Założenie 2: do istniejącej bazy danych dochodzą dwa komplety nowych plików (dla każdej wersji językowej): pl_pages_meta.php pl_pages_meta.def.php pl_products_meta.php pl_products_meta.def.php Założenie 3: Przykład pokazuję dla dwóch zmiennych metadanych, żeby było bardziej przejrzyste. Struktura plików: pl_pages_meta.def.php - definiujemy nowe pola metadanych:
<?php $aFieldsNames = Array( 'iPage' => 0 , 'sMetadata1' => 1 , 'sMetadata2' => 2 ); function pl_pages_meta ( $aExp ){ return Array( 'iPage' => $aExp [ 0 ], 'sMetadata1' => $aExp [ 1 ], 'sMetadata2' => $aExp [ 2 ] ); } ?>
pl_pages_meta.php
<?php exit; ?> 9010$treść metadanej nr 1$treść metadanej nr 2$ 9011$treść metadanej nr 1$treść metadanej nr 2$
Pliki pl_products_meta.php pl_products_meta.def.php są identyczne, różnica jest tylko w nazwie funkcji. Zamiast
pl_pages_meta ( $aExp )
powinno być
pl_products_meta ( $aExp )
. ZMIANY W ISTNIEJĄCYCH PLIKACH: \config\general.php dochodzą nowe linie:
$config_db[ 'pages_meta' ] = $config [ 'dir_db' ]. LANGUAGE . '_pages_meta.php' ; $config_db [ 'products_meta' ] = $config [ 'dir_db' ]. LANGUAGE . '_products_meta.php' ; define ( 'DB_PAGES_META' , $config_db [ 'pages_meta' ] ); define ( 'DB_PRODUCTS_META' , $config_db [ 'products_meta' ] );
\core\products.php W funkcji "throwProduct" trzeba dodać odczyt z pliku nowej bazy danych, zaraz pod odczytem DB_PRODUCTS_EXT:
$bFile = file ( DB_PRODUCTS_META ); $bCount = count ( $bFile ); $bFunction = LANGUAGE . '_products_meta' ; for( $b = 1 ; $b < $bCount ; $b ++ ){ $bExp = explode ( '$' , $bFile [ $b ] ); if( $bExp [ 0 ] == $iProduct ){ $bData3 = $bFunction ( $bExp ); break; } } // end for
W warunku
if( isset( $aData ) ){[/ php ], który dotyczy bazy DB_PRODUCTS_EXT dodajemy niejako kontynuację czytania bazy z nowego pliku : [ php ] if( isset( $aData ) ){ .... .... .... if( isset( $bData3 ) ){ if( !empty( $bExp [ 1 ] ) ) /* metadana PRODUCTS_META nr 1 */ $aData [ '$sMetadata1' ] = $bExp [ 1 ]; if( !empty( $bExp [ 2 ] ) ) /* metadana PRODUCTS_META nr 2 */ $aData [ '$sMetadata1' ] = $bExp [ 2 ]; } .... .... }
Zwróć uwagę, że dane przekazywane są do wspólnej zmiennej aData, a nie do bData3. \actions_client\products.php Dane, które odczytane zostały w poprzednim pliku, tutaj trzeba odczytać i przekazać do nowych zmiennych.
if( isset( $aActions [ 'a' ] ) && is_numeric ( $aActions [ 'a' ] ) ){ .... .... .... if( isset( $aData ) ){ if( !empty( $aData [ '$sMetadata1' ] ) ) /* metadana nr 1 */ $sMetadata1 = $aData [ '$sMetadata1' ]; if( !empty( $aData [ '$sMetadata2' ] ) ) /* metadana nr 2 */ $sMetadata2 = $aData [ '$sMetadata2' ]; } }
\templates\themes\default.php W tym pliku zaczynamy zbierać już wszystkie informacje i przekazywać je na wyświetlaną stronę. Na samym końcu, przed wywołaniem
echo $oTpl -> tbHtml ( 'container.tpl' , 'HEAD' ).....
dodajemy część, która zepnie metadane z PAGE LUB PRODUCTS:
.... .... if( isset( $content ) ){ /* w tym miejscu pobierane są dane z pliku "pages_meta.php" */ /* i porównywane są z numerem ID strony wywoływanej. */ $aFile = file ( DB_PAGES_META ); $iCount1 = count ( $aFile ); $sFunction = LANGUAGE . '_pages_meta' ; for( $i = 1 ; $i < $iCount1 ; $i ++ ){ $aExp = explode ( '$' , $aFile [ $i ] ); if( $aExp [ 0 ] == $iContent ){ $aData = $sFunction ( $aExp ); break; } } // end for if( isset( $aData ) ){ /* jeżeli numer ID strony istnieje, */ /* to następuje bezpośrednie przekazanie metadanych */ /* do zmiennej aData, która trafia do HEAD */ $aFile = null ; if( isset( $aExp [ 0 ] ) ){ if( !empty( $aExp [ 1 ] ) ) /* metadana PAGE_META nr 1 */ $aData [ '$sMetadata1' ] = $aExp [ 1 ]; if( !empty( $aExp [ 2 ] ) ) /* metadana PAGE_META nr 2 */ $aData [ '$sMetadata2' ] = $aExp [ 2 ]; //$oTpl->setVariables( 'aData', $aData ); } } else{ /* numer strony nie istnieje, więc jest strona produktu. */ /* Pobierane są dane z pliku: */ /* \actions_client\products.php */ /* gdzie zdefiniowane są zmienne poszczególnych metadanych */ if( !empty( $sMetadata1 ) ) /* metadana PRODUCTS_META nr 1 */ $aData [ 'sMetadata1' ] = $sMetadata1 ; if( !empty( $sMetadata2 ) ) /* metadana PRODUCTS_META nr 2 */ $aData [ 'sMetadata2' ] = $sMetadata2 ; //$oTpl->setVariables( 'aData', $aData ); } } echo $oTpl -> tbHtml ( 'container.tpl' , 'HEAD' ).....
\templates\container.tpl Tutaj w części <head> dodajemy już finalną wersję składni nowych metadanych, wszystko wedle własnych potrzeb:
.... < head > < title > $sTitle$config [ title ]</ title > .... .... < meta property = "article:modified_time" content = "$aData[sMetadata1]" /> < meta itemprop = "image" content = "$aData[sMetadata2]" /> .... </ head > ....
U mnie zadziałało :)
» Quick.Cart v4.x malavva