Մոխրագույն վեբ հղումներ php. Հաքեր և հավելումներ. Ճանապարհի ընդլայնում և հնարավոր SQL ներարկումներ Joomla-ում

Մուտքի կետ Joomla! բաղադրիչը նման է բաղադրիչների մեծ մասի համար: Այս օրինակի համար մենք կօգտագործենք Joomla-ի հիմնական բաղադրիչներից մեկը՝ Web Links: Առաջին ֆայլը, որը կկատարվի ճակատային մասում. …/components/com_weblinks/weblinks.php.

Սկզբում մենք տեսնում ենք անվտանգության ստուգում, որը նախատեսված է համոզվելու, որ ոչ ոք չի կարող ուղղակիորեն զանգահարել այս էջին: Սա այն ստանդարտն է, որը պետք է օգտագործվի ձեր բոլոր php ֆայլերում (չնայած կան մի քանի բացառություններ).

Մենք ստուգում ենք հարցման տողը, որպեսզի տեսնենք, արդյոք ուղարկվել է հատուկ վերահսկիչի անուն: Եթե ​​այո, մենք համոզված ենք, որ կարող ենք բեռնել անհրաժեշտ ֆայլը կարգավորիչների գրացուցակում.

// Պահանջել հատուկ վերահսկիչ, եթե պահանջվի if ($controller = JRequest::getWord("controller") ) ( $path = JPATH_COMPONENT. DS. "controllers" . DS. $controller. ".php" ; if (file_exists ($path) ) ( require_once $path ; ) else ($controller = "" ;))

Այժմ մենք ներկայացնում ենք մեր վերահսկիչի դասը, օգտագործելով վերը նշված անունը.

Առաջադրանքն ավարտվելուն պես մենք կատարում ենք վերահղում, եթե պահանջվում է.

// Վերահղում, եթե սահմանված է վերահսկիչի կողմից$controller -> վերահղում () ;

Վերահսկիչի դաս

Հղումների բաղադրիչի ընդհանուր (հատուկ) վերահսկիչն այստեղ է՝ …/components/com_weblinks/controller.php.
Այս ամբողջ դասը սահմանում է ցուցադրման մեթոդ, որը լռելյայն օգտագործվող մեթոդն է, եթե օգտատերը չնշի այլ առաջադրանք:

սահմանված ("_JEXEC") կամ die ("Սահմանափակ մուտք"); jimport ( «joomla.application.component.controller») ; /** * Weblinks Component Controller * * @package Joomla * @subpackage Weblinks * @ince 1.5 */դասի WeblinksController-ը երկարացնում է JController-ը ( /** * Վեբ հղումների դիտումը ցուցադրելու մեթոդ * * @access public * @ince 1.5 */ֆունկցիայի ցուցադրում () ( // Սահմանեք կանխադրված տեսք, եթե չկա if (! JRequest:: getCmd ("view") ) (JRequest:: setVar ("view", "categories") ;) //թարմացրեք վեբ հղման հարվածների քանակը if (JRequest:: getCmd ("view") == "weblink") ($model =& $this -> getModel ("weblink") ; $model -> հարվածել () ;) // Դիտել քեշավորման տրամաբանությունը -- պարզ... մենք մուտք գործե՞լ ենք:$user = &JFactory::getUser(); $view = JRequest::getVar("view"); $viewcache = JRequest::getVar("viewcache" , "1" , "POST" , "INT" ); if ($user -> ստանալ ("id") || ($view == "category" && $viewcache == 0) ) (parent:: display (false) ;) else (parent:: display (true) ; ))))

Այս մեթոդում մենք նախադրել ենք կանխադրված տեսքը, որպեսզի ցույց տա կատեգորիաները, եթե այլ տեսք չփոխանցվի որպես հարցման տողի պարամետր: Եթե ​​պահանջվող տեսքը վեբ հղումն է, մենք ավելացնում ենք հղման դիտման հաշվիչը: Հետո սահմանում ենք view փոփոխականի արժեքը և կանչում մեր ծնող դասի JController-ի ցուցադրման մեթոդը.
Արժե հատուկ ուշադրություն դարձնել getModel մեթոդի կանչին։ Այն ներբեռնում է անհրաժեշտը բաղադրիչի մոդելը. Այս օրինակում այս մեթոդը կբեռնի վեբ-հղման մոդելը, որը գտնվում է այստեղ. …/components/com_weblinks/models/weblink.php.
Այստեղ մենք կհամաձայնվենք, որ մենք կոնկրետ տեսակետ չենք խնդրել, և հետևաբար մեր տեսակետը կսահմանվի կատեգորիաների:
Հաջորդը, մենք բացում ենք դիտման դասը:

Դիտել դասը

Քանի որ մենք ենթադրում ենք, որ ցանկանում ենք կատեգորիայի դիտում, սա հետևյալ ֆայլն է, որը կկատարվի. …/components/com_weblinks/views/categories/view.html.php

// Ստուգեք՝ համոզվելու համար, որ այս ֆայլը ներառված է Joomla-ում: defined ("_JEXEC") կամ die ("Սահմանափակ մուտք"); jimport ( "joomla.application.component.view") ; /** * HTML Դիտել դաս WebLinks բաղադրիչի համար * * @static * @package Joomla * @subpackage Weblinks * @ince 1.0 */դասը WeblinksViewCategories ընդլայնում է JView ( ֆունկցիայի ցուցադրում ( $tpl = null ) (գլոբալ $mainframe ; $document =& JFactory:: getDocument () ; $categories =& $this -> ստանալ ("տվյալներ") ; $total =& $this -> ստանալ ("ընդհանուր"); $state =& $this -> ստանալ ("state"); // Ստացեք էջի/բաղադրիչի կոնֆիգուրացիան$params = & $mainframe -> getParams () ; $menus = &JSite::getMenu(); $menu = $menus -> getActive () ; // քանի որ հավելվածը սահմանում է լռելյայն էջի վերնագիր, մենք պետք է ստանանք այն // հենց մենյուի տարրից if (is_object ( $menu ) ) ( $menu_params = new JParameter( $menu -> params ) ; if (! $menu_params -> get ( "page_title" ) ) ( $params -> set ( "page_title" , JText:: _( «Վեբ հղումներ» ) ) ;) ) else ( $params -> set ( «page_title» , JText:: _( «Վեբ հղումներ» ) ); ")); // Սահմանեք որոշ կանխադրվածներ, եթե սահմանված չէ պարամետրերի համար$params -> def ("comp_description", JText::_("WEBLINKS_DESC") ); // Սահմանել պատկերի պիտակի ատրիբուտները if ($params -> ստանալ ("image") != - 1) (if ($params -> ստանալ ("image_align") != "" ) $attribs [ "align" ] = $params -> ստանալ (" image_align"); else $attribs ["align"] = "";$attribs ["hspace"] = 6; // Օգտագործեք ստատիկ HTML գրադարան՝ պատկերի պիտակը կառուցելու համար$image = JHTML:: _("image", "images/stories/" . $params -> get ("image") , JText:: _("Web Links" ) , $attribs ) ; ) համար ($i = 0; $i< count ($categories ) ; $i ++ ) { $category =& $categories [ $i ] ; $category ->հղում = JRoute::_( "index.php?option=com_weblinks&view=category&id=". $category -> slug ) ; // Պատրաստել կատեգորիայի նկարագրությունը$category -> description = JHTML:: _("content.prepare" , $category -> description ) ; ) $this -> assignRef ( "image" , $image ); $this -> assignRef ("params" , $params ); $this -> assignRef ("categories" , $categories ); ծնող::ցուցադրել ($tpl); )) ?>

Կրկին, սա շատ պարզ դաս է մեկ ցուցադրման մեթոդով: Այստեղ տրամաբանության մեծ մասը հատուկ է հղման բաղադրիչին, բայց եթե ուշադիր նայեք, կարող եք գտնել գործառույթներ, որոնք օգտագործվում են բաղադրիչի դիտման դասերի մեծ մասում: Ցուցադրման մեթոդի վերջում այս դասը կանչում է ծնողին (JView) ցուցադրման մեթոդ, փոխանցելով ցուցադրվող կաղապարի անվանումը։ Եթե ​​ցուցադրման կաղապարի անունը չի փոխանցվում, ապա օգտագործվում է «կանխադրված» կաղապարը:
Եվ վերջապես, մենք բացում ենք կաղապարի դասը:

Կաղապարի դաս

Եկեք համաձայնենք, որ կոնկրետ կաղապարի անուն չի փոխանցվել, ուստի կօգտագործվի լռելյայն ձևանմուշը։ Այս դեպքում դիտարկվելու է հետևյալ ֆայլը. …/components/com_weblinks/views/categories/tmpl/default.php
-> escape ($this -> params -> get ("page_title") ); ?>

params -> def («պատկեր» , - 1 ) != - 1 ) || $this -> params -> def ("show_comp_description" , 1 ) ): ?>
պատկեր )): echo $this -> image ; endif ; echo $this -> params -> get ("comp_description" ); ?>
    կատեգորիաները որպես $category ): ?>
  • escape ($category -> title) ; ?> (numlinks; ?>)

Այստեղ տրամաբանության մեծ մասը հատուկ է կատարվող բաղադրիչին: Կոդից կարող եք նաև տեսնել, որ այս ֆայլը պարունակում է PHP-ի հետ խառնված ամբողջ HTML-ը. սրանք են դրա առանձնահատկությունները և նպատակը:

Այլ ֆայլեր, որոնք օգտագործվում են բաղադրիչներում

Ֆայլերի մի քանի այլ տեսակներ, որոնք կարող եք գտնել բաղադրիչներում.

  • Օգնողներ - բաղադրիչները հաճախ օգտագործում են helper.php ֆայլ կամ օգնականների գրացուցակ բազմաթիվ ֆայլերով: Այս ֆայլերը սովորաբար պարունակում են միայն ընդհանուր ֆունկցիոնալությունըբաղադրիչի համար.
  • Ըստ երևույթին, «Ակտիվները» բաղադրիչի մեջ ընդգրկված այլ ֆայլերի թղթապանակն է:
  • router.php - այս ֆայլը օգտագործվում է, երբ SEF URL-ի կարգավորումը միացված է, URL-ը երկու ուղղություններով թարգմանելու համար (փոխանուններով ընթեռնելիի և պարամետրերով Joomla համակարգի տեսքի):
  • xml ֆայլեր - դրանք սովորաբար սահմանում են պարամետրեր և այլ տեղեկություններ բաղադրիչի և դրա ակնարկի մասին: Դրանք օգտագործվում են, օրինակ, բաղադրիչ ցանկի տարրեր ստեղծելիս:
  • index.html - Ձեր բոլոր գրացուցակներում դատարկ index.html ֆայլ ունենալը լավ պրակտիկա է: Սա նման պասիվ անվտանգության միջոց է։
  • css/images/js - թղթապանակներ, որոնք պարունակում են տարբեր ֆայլերդիզայն և ֆունկցիոնալություն իրականացնել հաճախորդի կողմից (բրաուզերում):

Ես շարունակում եմ ձեզ հետ կիսվել փոքր, բայց շատ օգտակար կայքերի սցենարներով, որոնք օգնում են բարելավել ձեր վերաբերմունքը որոնման համակարգերդեպի ձեր կայքը: Այս անգամ մենք կխոսենք էջերի ճիշտ հղումների մասին:

Նախ, եկեք ստեղծենք էջի հասցեների տվյալների բազա և դրանցից յուրաքանչյուրի համար հնարավոր խարիսխները: Որպես հիմք մենք կօգտագործենք *.txt ֆայլը: Ֆայլի կառուցվածքը կլինի հետևյալը.

Էջ_հասցե_1; խարիսխ_1, խարիսխ_2, խարիսխ_3,..., խարիսխ_n էջի_հասցե_2; խարիսխ_1, խարիսխ_2, խարիսխ_3,..., խարիսխ_n էջի_հասցե_3; խարիսխ_1, խարիսխ_2, խարիսխ_3,..., խարիսխ_n, խարիսխ_2, խարիսխ_n, խարիսխ_1 խարիսխ_3, ..., խարիսխ_ն

Ինչպես տեսնում եք, սցենարի հետագա օգտագործումը հնարավոր է ցանկացած թվով էջի հասցեներով և դրանց համար խարիսխներով: Էջի հասցեն գրված է առանց http://www.site.ru/-ի, այսինքն. անմիջապես արմատից՝ առանց առաջին շեղի: Հասցեն խարիսխներից բաժանվում է ստորակետով, իսկ խարիսխները՝ ընդամենը ստորակետով։ Կարող եք նաև գրել ամբողջական հասցեն, պարզապես դա ավելի հարմար է անձամբ ինձ համար, և դուք կարող եք ինքներդ փոխել արդյունքի լրացումն ու ելքը, կարծում եմ, ինքներդ ինտուիտիվ կերպով կհասկանաք դա:

Եվ այսպես, նրանց համար ստեղծվել է հղումների և խարիսխների տվյալների բազա, ներքևում ես կտամ PHP կոդի օրինակ՝ կայքում կապելու համար հղումներ ուղղակիորեն ցուցադրելու համար.

«.$tex2[$tex3]»:"; } ?>

Մենք տեղադրում ենք այս կոդը կայքի ցանկացած կետում, որը ցուցադրում է 5 պատահական հղումներ տվյալների բազայից և պատահական խարիսխ: Ավելի լավ է խարիսխները նոսրացնել, քան հղմանը գրել միայն 1: Ձեր վեբ կայքի պատշաճ հղումով դուք անմիջապես կտեսնեք տրաֆիկի աճ և վեբ կայքի այլ ցուցանիշների բարելավում:

Ես անհամբեր սպասում եմ ձեր հարցերին այս գրառման մեկնաբանություններում:

Հրապարակման ամսաթիվ՝ 03.03.2014թ
    Կարծիքներ և մեկնաբանություններ.

    Դմիտրի:
    Շնորհակալություն սցենարի համար, ես այն կիրականացնեմ։ Սկսած աղբյուր կոդըԿայքից պատճենել հնարավոր չէ, պատճենվում է միայն փոքր հատվածներով, ավելի հարմար կլիներ ամբողջությամբ։

    Կիրիլ:
    Շնորհակալություն պատճենելու մասին գրառման համար, ես հենց նոր տեսա այն, շուտով կփորձեմ ուղղել այն:

    Ալեքսեյ Պավլով:
    $tex = explode(":",$sendlist[$count] տողում սխալ է եղել, այլ ոչ թե երկու կետ: Ես մի փոքր փոխեցի կոդը, որպեսզի այն ավելի պարզ լինի.$խարիսխ"; } ?>

    Մատրք:
    Հոդվածը բոլորովին անօգուտ է, քանի որ... Բլոգն ունի տեքստի պատճենման պաշտպանություն:

    Կիրիլ:
    js-ում փոքր սխալ կա, այո, ժամանակ չկա այն շտկելու, բայց երևի մեկ ուրիշն անիմաստ է, քանի որ նրանք բավականաչափ խելացի չեն, այս դեպքում նայեք էջի սկզբնական կոդը և վերցրեք այն այնտեղից:

    Մատրք:
    Նրանք. Արդյո՞ք ես դեռ պետք է անցնեմ աղբյուրի կոդը և մաքրեմ այն ​​ամբողջ աղբից: Դուք ծիծաղելի եք:

    Կիրիլ:
    Արդյո՞ք դա նշանակում է, որ ես ինչ-որ մեկին ինչ-որ բանի պարտք եմ: Ձեր փողը վերցրու՞մ եք, էստեղ փորձու՞մ եք, անվճար խորհուրդներ եք տալիս :))) Անվճար պանիրը միայն մկան թակարդում է, մեծանալով կհասկանաք։

    Կիրիլ:
    Ջամբը հանեցի, վայելեք ձեր առողջության համար։

    Անդրեյ Կոպաև:
    1 - հավանաբար ավելի լավ է դա անել mysql տվյալների բազայի միջոցով, այն ավելի արագ կաշխատի, և ավելի հեշտ է ավելացնել 2 - Ես չեմ հասկանում, թե որն է ամեն անգամ հղումների ցուցակ ստեղծելու իմաստը: Ինչպե՞ս է դա ազդում երթևեկության աճի վրա: Հնարավո՞ր է բեռնել Ajax-ի միջոցով, այսինքն. սա մարդկանց համար է, թե բոտերի համար:

    www.site:
    Առաջխաղացման համար, սակայն, անձամբ ես ՀԾ-ի հետ նման մանիպուլյացիաների կողմնակից չեմ։

Եկեք սկսենք դիտարկել բաղադրիչները՝ նայելով, թե ինչպես է հիմնական Weblinks բաղադրիչը գործում վեբ կայքի ադմինիստրատորային մասում: Այս բաղադրիչը, որը բնորոշ է կայքի այս հատվածին, շատ նման է իր մյուս բաղադրիչներին, որոնք նախատեսված են հոդվածներ, օգտատերեր, մոդուլներ և այլն կառավարելու համար։

Այս բաղադրիչի ծրագրային ֆայլերը ներկայացված են ստորև: Այս բոլոր ֆայլերը գտնվում են թղթապանակում administator/components/com_weblinks. Այս գլխի մնացած մասում բոլոր Weblinks բաղադրիչների ֆայլերի անունները վերաբերում են այս մեկնարկային թղթապանակին, եթե այլ բան նշված չէ: Ֆայլերի մեծ մասը կազմակերպված է MVC օրինաչափության համաձայն: Մասնավորապես, դիտման բոլոր ֆայլերը գտնվում են views ենթաթղթապանակում, իսկ բոլոր հիմնական մոդելի և վերահսկիչի ֆայլերը՝ համապատասխանաբար մոդելների և կարգավորիչների ենթաթղթապանակներում: Դրանք նաև լրացվում են տեղադրման, կազմաձևման և օժանդակ ֆայլերով:

Բաղադրիչի վարչական մասի ֆայլերՎեբ հղումներ, բացառությամբ index.html ֆայլերի

  • controllers/weblink.php - Մեկ վեբ հղումների վերահսկիչ խմբագրելու հիմնական վերահսկիչ
  • controllers/weblinks.php - Հիմնական վերահսկիչ՝ Կարգավորիչը կազմելու և վեբ հղումների ցանկը Weblinks Manager էկրանին ցուցադրելու համար։
  • helpers/weblinks.php - Ապահովում է տարբեր մեթոդներ, որոնք օգտագործվում են կարգավորիչներում և դիտումներում
  • models/fields/ordering.php - JformField մոդելը, որը ցուցադրում է վեբ հղումների պատվիրման սյունակը Weblinks Manager էկրանին
  • models/forms/weblink.xml - XML ​​ֆայլ, որն օգտագործվում է Jform-Model Field դասում՝ մուտքագրման դաշտերով ձևը դասավորելու և էկրանին վեբ հղումները խմբագրելու համար։
  • models/weblink.php - Վեբ հղման մոդելի մեկ էկրանի մոդել
  • models/weblinks.php - Մոդել կառավարչի էկրանի համար Վեբ հղումների մոդել
  • sql/install.mysql.utf8.sql - SQL ֆայլ՝ տեղադրման ընթացքում վեբ հղումների աղյուսակ ստեղծելու համար
  • sql/uninstall.mysql.ut8.sql - SQL ֆայլ՝ տեղադրման ընթացքում վեբ հղման աղյուսակը հեռացնելու համար
  • tables/weblink.php - Ապահովում է Model դասը
  • views/weblink/tmpl/edit_metadata.php - Աղբյուրի դասավորության ֆայլ՝ վեբ հղման մետատվյալները խմբագրելու համար

Weblinks բաղադրիչի վարչական մասը

  • views/weblink/tmpl/edit_params.php - Աղբյուրի դասավորության ֆայլ՝ մեկ վեբ հղման ընտրության տարբերակները խմբագրելու համար
  • views/weblink/tmpl/edit.php - Աղբյուրի դասավորության ֆայլ՝ վեբ հղումը խմբագրելու համար
  • views/view.html.php - Հիմնական դիտման դաս՝ HTML ձևաչափով մեկ վեբ հղում ցուցադրելու համար Աղբյուրի դասավորության ֆայլ՝ վեբ հղումների կառավարչի համար
  • views/weblinks/view.html.php - Հիմնական դիտման դաս՝ վեբ հղումները HTML ձևաչափով անմիջապես Weblinks Manager էկրանին ցուցադրելու համար։
  • access.xml - XML ​​ֆայլ, որն ապահովում է մուտքի վերահսկման ցուցակի (ACL) համակարգի գործողությունների ցանկը
  • config.xml - XML ​​ֆայլ, որն ապահովում է բաղադրիչի կազմաձևման ընտրության ընտրանքների ցանկ
  • controller.php - Հիմնական վերահսկիչի դաս
  • weblinks.php - Հարցման մուտքի կետ
  • weblinks.xml - XML ​​ֆայլ, որն օգտագործվում է տեղադրման գործընթացը վերահսկելու համար

Ֆայլում կա առաջարկ /includes/joomla.phpֆունկցիայի մեջ cleanTextփոխարինել տողը

$տեքստ = strip_tags ($text); $text = strip_tags ($text, " " ) ;

Այս հաքը նախատեսված է միայննկարների համար, որոնք տեղադրված են որպես սովորական պատկերներ: Մամբոտի (mosimage) կողմից տեղադրված պատկերների համար այս հաքը չի աշխատի:

Ինչպես անել, որ ուղիղ հղումը հայտնվի com_weblinks բաղադրիչում

IN weblinks.html.phpդուք պետք է փոխարինեք տողը.

$link = sefRelToAbs ( "index.php?option=com_weblinks&task=view&catid=". $catid ."&id=" . $row ->id ) ; $link = $row ->url ;

Ինչպես անել, որ Joomla-ն աշխատի միաժամանակ երկու հոսթի (դոմենների) վրա: Նրանք. օրինակ՝ տեղական ցանցում 10.0.0.15-ին և ինտերնետային կայքից-firmy.ru-ից: Չնայած այն հանգամանքին, որ երկու հասցեները վերագրված են նույն մեքենային:

Նախ, խնդրի ամբողջ իմաստն այն է, որ Joomla-ն ցուցադրում է բոլոր պատկերները և CSS ֆայլերը (նրանց ուղիները կաղապարում) իր $mosConfig_live_site փոփոխականի համեմատ՝ տեղադրման ժամանակ մուտքագրված կայքի բազային հասցեն: Եվ եթե ինչ-որ մեկը փորձում է մուտք գործել այլ հասցեով, ապա դրա գործողության տրամաբանության մեջ ոչինչ չի փոխվում. բազային հասցեն վերցված է կազմաձևման ֆայլից: Օրինակ, եթե կոնֆիգուրացիան նշում է, որ Joomla-ն գտնվում է localhost-ում, ապա մուտք գործել՝ տեղական ցանց, նույնիսկ եթե ճիշտ կազմաձևված Apache-ն, որը լսում է 192.168.0.1 հասցեն, ոչինչ չի փոխում դրանում, պատկերների src-ը դեռ կսկսվի «localhost»-ով, որը մյուս մեքենաների համար արդեն կլինի իր սեփական «localhost»-ը: Այդպիսի դեպքերը փոխարինող փոփոխականն է $mosConfig_live_site հայցվող հոսթի համար, այնպես որ բոլոր գործառույթները կարող են ստեղծել ճիշտ հղումներ և արդեն ուղղորդել օգտվողին դեպի մեկ կամ մի այլ վիրտուալ կայք (ստեղծել ճիշտ բազային ուղիները դեպի նկարներ և հիմնական ուղիները դեպի հասցեներ): Auto live կայք mambot, որը կարող է ավտոմատացնել այն: Եթե դա ձեզ ինչ-որ կերպ չի համապատասխանում, ապա սկզբունքորեն այն կարող է կրկնվել, այդ նպատակով configuration.php$mosConfig_live_site-ի սահմանման փոխարեն դուք պետք է գրեք ձեր կոդը: Նման մի բան:

if ($_SERVER [ "HTTP_HOST" ] =="host1.ru" ) $mosConfig_live_site = "host1.ru" ; else $mosConfig_live_site = "host2.ru" ;

Պետք է ուշադրություն դարձնել, որ եթե դուք օգտագործում եք քեշ, ապա պետք է ունենաք նաև երկու տարբեր քեշավորման դիրեկտորիա երկու հոսթի համար, քանի որ տարբեր հոսթների հղումները կարող են հատվել քեշում, և այդ դեպքում սխալ ցանցից օգտվողը ընդհանրապես ոչ մի տեղ չի հասնի: . $mosConfig_cachepath փոփոխականը պատասխանատու է քեշի համար:

Ինչպես անել, որ երկու բաղադրիչ միաժամանակ հայտնվեն մեկ էջում

Ես ձեզ անմիջապես կասեմ, ամեն ինչ այնքան էլ պարզ չէ: Ի վերջո, դա մոդուլ չէ: Հետևաբար, նախ արժե այլընտրանք փնտրել, այսինքն. Անշուշտ, հայտնի բաղադրիչը գալիս է մոդուլներով, որոնք կարող են կրկնօրինակել դրա ֆունկցիոնալությունը: Եթե ​​նման բան չկա, ապա սա տարբերակ է։ Այն կարող է պատրաստվել որպես մոդուլ, կամ, տեսականորեն, այն կարող է տեղադրվել կաղապարի մեջ։ Գաղափարը հետևյալն է՝ բաղադրիչը կանչել index2.php-ի միջոցով (ինչ և ինչու. կարդալ ամբողջ փաստը): Նրանք. Դուք կարող եք iframe պատրաստել src="index2.php?option=com_component&no_html=1"-ով երկրորդ բաղադրիչի համար ցանկալի տեղադրման կետում: Եվ այն կցուցադրվի այնտեղ: Ուրիշ բան, որ քիչ հավանական է, որ հնարավոր լինի լիարժեք ապահովել ֆունկցիոնալությունը։ Բայց, այնուամենայնիվ, սա ելք է։

Կամ օգտագործեք կոնստրուկցիան՝ mosLoadComponent("com_mycomp" );

Բայց, եթե բաղադրիչը կատարվում է այս կերպ, ապա դուք պետք է հասկանաք, որ այն չգիտի ձեր մանիպուլյացիաների մասին և կաշխատի իր $ տարբերակի և $task-ի համաձայն։

Ինչպես ավելացնել վերնագրի երկարությունը հոդվածում

Դուք պետք է գործարկեք հետևյալ երկու հրամանները phpMyAdmin-ում (կա հատուկ էջ SQL հարցումների կատարման համար), պարզապես ###_-ը փոխարինեք ձեր իրական սեղանի նախածանցով։ Առավելագույն հնարավոր թիվը 255 է։ Օրինակում օգտագործվում է 200։

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԸ «###_բովանդակությունը» ՓՈԽԵԼ «title_alias»՝ «title_alias» VARCHAR(200) NOT NULL; ՓՈՓՈԽԵԼ ՍԵՂԱՆԻ «###_բովանդակությունը» ՓՈԽԵԼ «վերնագիր» «վերնագիր» VARCHAR(200) NOT NULL;

Ինչպես ներառել ամբողջական նորությունների տեքստերը ձեր RSS հոսքում, ոչ միայն դրանց վերնագրերը

Դա անելու համար /components/com_rss/rss.php ֆայլում պետք է փոխարինել

$item_description = $row ->introext ; $item_description = $row ->fulltext ;

Ինչպե՞ս կարող եմ ստեղծել երկու Joomla կայք՝ օգտագործելով նույն տվյալների բազան կամ օգտագործելով նույն ֆայլերը:

Ինչ վերաբերում է մեկ տվյալների բազայի օգտագործմանը, ապա պետք է գրել մեկ տվյալների բազա configuration.php-ում երկու շարժիչների համար, բայց դուք պետք է հասկանաք, թե ինչ եք անում: Քանի որ օգտատերերի համար նիստերի պահպանումն այս դեպքում շատ խնդրահարույց կլինի, քանի որ տիրույթները տարբեր են։ Նրանք. #__sessions աղյուսակի մուտքի գրառումները (կարող են) համընկնել:

Եթե ​​ցանկանում եք օգտագործել նույն ֆայլերը՝ առանց մեծ բաշխման պատճենելու, ապա սկզբունքորեն կարող եք օգտագործել «ln -s» հրամանը Linux-ում՝ գոյություն ունեցող ֆայլերին խորհրդանշական հղումներ ստեղծելու և դրանք նոր կայքի համար չպատճենելու համար:

Ինչպես ստեղծել վիրտուալ էջ, որը հասանելի է կոնկրետ հասցեով Joomla-ի ընդհանուր դիզայնում (http:///site.ru/super_page)

  • Առաջին ճանապարհը SEF բաղադրիչի օգտագործումն է, որտեղ դուք նշում եք ստատիկ էջի ցանկալի վիրտուալ ուղին: Այստեղ կա մի մինուս. այս բաղադրիչը կսկսի վերափոխել բոլոր մյուս հղումները (և ընդհանրապես այս բաղադրիչները շատ էներգիա են պահանջում և շատ ռեսուրսներ են պահանջում աշխատելու համար):
  • Ստեղծեք այլանուն նման էջի համար՝ օգտագործելով mod_rewriteԵվ .htaccess. Դա անելու համար ձեզ հարկավոր է.
    • Ստեղծեք ստատիկ էջ ձեզ անհրաժեշտ տեքստով, պարզեք դրա ID-ն և հասցեն (պարտադիր չէ ստեղծել նման էջ, այն կարող է արդեն գոյություն ունենալ և ընդհանրապես դա ցանկացած բաղադրիչ է, պարտադիր չէ, որ com_content)
    • Մտածեք կեղծանունով, թող լինի» super_puper"
    • Բացեք .htaccess և «RewriteCond %(REQUEST_FILENAME) !-f» տողից առաջ գրեք.
RewriteRule ^(super_puper) index.php?option=com_content&task=view&id=12 RewriteCond %(REQUEST_FILENAME) !-f
    • Եվ հիմա, պայմանով, որ Joomla-ն գտնվում է site.ru-ում, երբ բացեք http:/ /site.ru/super_puper հղումը, կբացվի անհրաժեշտ ստատիկ էջը ձեր տեղեկություններով: Հղումն ինքնին «index.php?option=com_content&task=view&id=12» կարող է լինել այն, ինչ ձեզ հարկավոր է, գլխավորն այն է, որ հղումը չէրբացարձակ (այսինքն՝ http:// /...-ով) և հարաբերական ( պետք էսկսել index.php-ով...)

Ինչպես անջատել քեշավորումը կոնկրետ հոդվածի համար

Սա կարող է անհրաժեշտ լինել, եթե դուք օգտագործում եք rd_addphp mambot՝ ցանկացած սկրիպտներ տեղադրելու համար, որոնք ամեն անգամ պետք է ստեղծեն պատահական թվեր կամ պատահական տեքստ՝ անկախ Joomla-ի քեշավորման համակարգից: Որոշակի տարրի քեշավորումն անջատելու համար անհրաժեշտ է պարզել դրա ID-ն (ադմինիստրատորի վահանակում, խմբագրելիս, նայեք հասցեի բար, այնտեղ կնշվի «...&id=123...» նման մի բան։ Այսպիսով, 123-ը կլինի մեր հոդվածի ID-ն: Ֆայլում անհրաժեշտ է փոխարինել /components/com_content/content.php մոտավորապես 1600 տողում:

$cache ->cache ("HTML_content::ցուցադրել" , $row , $params , $access , $page ); if ($row ->id !="123" ) $cache ->cache ( "HTML_content::show" , $row , $params , $access , $page ) ; else HTML_content::ցուցադրել ($row, $params, $access, $page) ;

Որտեղ 123-ը ձեզ անհրաժեշտ հոդվածի ID-ն է:

Ես տեղադրեցի շատ բաղադրիչներ, բայց ադմինիստրատորի մենյուի բաղադրիչների ցանկը ցույց է տալիս դրանց կրճատված թիվը, այնուհետև գրված է «Ավելի շատ բաղադրիչներ...»: Ինչպես ցուցադրել բոլոր բաղադրիչները:

Ձեզ անհրաժեշտ է տող /administrator/modules/mod_fullmenu.php ֆայլում

$topLevelLimit = 19;

փոխարինվել է

$topLevelLimit = 199;

Ինչպես տեղադրել բաղադրիչի պատճենը

Պետք է ասել, որ առաջադրանքը չափազանց բարդ է։ Եթե ​​դուք չեք հասկանում, թե ինչպես է աշխատում բաղադրիչը, ապա դուք նույնիսկ չպետք է փորձեք: Նրանց համար, ովքեր դեռ ցանկանում են նշել հիմնական կետերը.

  • XML ֆայլում վերանվանեք բաղադրիչի անունը անվան պիտակի մեջ
  • Հաջորդը, դուք պետք է վերանվանեք օգտագործված աղյուսակները (նախ XML ֆայլում, և երկրորդը բոլոր բաղադրիչ ֆայլերում, որտեղ էլ որ օգտագործվում է տվյալների բազայի օբյեկտը $շտեմարանև մեթոդ setQuery)
  • Վերանվանեք բաղադրիչների բոլոր ուղիները նույնպես: Ճանապարհները կարող են օգտագործվել իրեն հղումներում կամ ներառված ֆայլերի անուններում: Ամենից հաճախ դա պայմանավորված է com_componentname ենթատողի որոնմամբ և այն նորով փոխարինելու հետ:

Բայց այս մեթոդը ոչինչ չի երաշխավորում։ Պարզների դեպքում դա հնարավոր է և կանցնի, իսկ բարդերի դեպքում ոչ ոք չի կարող երաշխավորել։

Ինչպես պատահականորեն մեկ դիրք դարձնել, ցույց տալ դրան հատկացված մոդուլներից մեկը

  • Տարբերակ 1 - կոտրել mosLoadModules ֆունկցիան: Կաղապարում, այն վայրում, որտեղ անհրաժեշտ է ցուցադրել N մոդուլներից մեկը, մենք գրում ենք (ուշադրություն դարձրեք երրորդ փաստարկին).
mosLoadModules ("դիրք", display_setup,true);

Եվ մենք մի փոքր ուղղում ենք վերը նշված գործառույթն ինքնին.

ֆունկցիա mosLoadModules( $position = "ձախ", $style =0, $show_random = false) (... $allModules =& initModules() ; if (isset ($GLOBALS ["_MOS_MODULES"] [$position])) ( $modules = $GLOBALS [ "_MOS_MODULES" ] [ $position ] ;) else ($modules = array () ;) //ավելացնել այստեղ, եթե ($show_random && sizeof ($modules) >0) ($tmp = $modules [ rand (0 ,sizeof ($modules) -1)]; $modules = array ($tmp) ;) //հայտարարության վերջ, if (count ($modules)< 1 ) { $style = 0 ; }

Մենք դրան ավելացրինք երրորդ փաստարկը (որն օգտագործվում է կաղապարում, որտեղ մենք գրել ենք true) և փոփոխել կոդը։

  • Երկրորդ տարբերակն ավելի ցավոտ է, մենք միայն ձևափոխում ենք ձևանմուշը։ Բայց ավելի աշխատատար՝ մենք պետք է մի քանի դիրքեր ստեղծենք։ Նախ, մենք ստեղծում ենք մի քանի նոր մոդուլի դիրքեր, օրինակ new1 ... new10: Պահպանել. Կաղապարի ճիշտ տեղում, նախքան mosLoadModules ֆունկցիան կանչելը, ավելացրեք անհրաժեշտ կոդը.
$rand_num = ռանդ (1,10); //1-ից 10-ը, ինչպես պաշտոնի անվանման մեջ mosLoadModules («նոր». $rand_num, display_settings);

Կարծում եմ, որ վերանվանելով /adminisrator/ թղթապանակը ես իմ կայքը կդարձնեմ ավելի ապահով

Այս տարբերակը չի տրամադրվում որպես ստանդարտ: Բայց իրականում հնարավոր է Joomla ֆայլերում որոնում կազմակերպելով նման բառի ցանկացած երևույթ փոխարինել քոնով՝ գաղտնի: Երբեմն, ավելի ուշ, ֆայլեր մուտք գործելու անկարողության հետ կապված սխալներ կարող են առաջանալ, բայց իմանալով ֆայլի և տողի համարը, դրանք կարող են ուղղվել: Ուստի խնդիրը սկզբունքորեն լուծելի է։