വെബ്ലിങ്കുകൾ php വരുമാനം. ലെയർ കേക്കും com_weblinks ജൂംലയും. ഘടകങ്ങളിൽ ഉപയോഗിക്കുന്ന മറ്റ് ഫയലുകൾ

പാളികളുള്ള കേക്ക്

com_weblinks ഘടകത്തെക്കുറിച്ചും ജൂംല പേജിൻ്റെ html മാർക്ക്അപ്പിനെക്കുറിച്ചും നമ്മൾ സംസാരിക്കും. ഒരു ജൂംല വെബ്‌സൈറ്റിൽ ലിങ്കുകളുടെ ഒരു ഡയറക്‌ടറി എങ്ങനെ എളുപ്പത്തിലും ലളിതമായും സൃഷ്‌ടിക്കാം എന്നതിനെക്കുറിച്ച്.

നേരിട്ടുള്ള കോഡിംഗ് ഇല്ലാതെ, രജിസ്റ്റർ ചെയ്ത ഒരു ഉപയോക്താവുമായുള്ള സംവേദനാത്മക പ്രവർത്തനത്തിന് വേണ്ടിയാണ് ഈ CMS സൃഷ്ടിച്ചത്. ജൂംലയുടെ വികസന പ്രവണത സൈറ്റിൽ പൂർണ്ണമായും ഉപയോഗശൂന്യമായി com_weblinks ഘടകത്തെ ഉപേക്ഷിക്കുന്നതിലേക്ക് നയിക്കുന്നു, കൂടാതെ ഇതിനകം തന്നെ “കനത്ത” സിസ്റ്റത്തിലേക്ക് അധിക ഭാരം (100 kb - 90 ഫയലുകളിൽ കൂടുതൽ) ചേർക്കുന്നു. എന്നാൽ ഇപ്പോൾ ഈ ഘടകം ഇപ്പോഴും വിതരണത്തിൽ ഉണ്ട്, ചില പ്രോഗ്രാമർമാർ ഇത് ഉപയോഗിക്കുന്നു.

സ്‌ക്രീനിൽ ദൃശ്യമാകുന്ന ജൂംല വെബ്‌സൈറ്റ് പേജ് ഒരു ലെയർ കേക്ക് ആണ്, ഇതിൻ്റെ നിർമ്മാണത്തിൽ നിരവധി ബ്ലോക്കുകൾ (അതിനാൽ നിരവധി ടെംപ്ലേറ്റുകൾ) ഒരേസമയം ഉൾപ്പെടുന്നു. ഇവിടെയാണ് ജൂംല തത്ത്വചിന്ത പ്രവർത്തിക്കുന്നത് - വലിയ ബ്ലോക്ക് സൈറ്റ് നിർമ്മാണം. ഓരോ ബ്ലോക്കിനും അതിൻ്റേതായ HTML മാർക്ക്അപ്പ് ടെംപ്ലേറ്റ് (ലേഔട്ട്) ഉണ്ടായിരിക്കണം.

പ്രധാന ബ്ലോക്കുകൾ:

പ്രധാന പേജ് ടെംപ്ലേറ്റ് (site_template/index.php), അതിൻ്റെ html മാർക്ക്അപ്പ് ഉപയോഗിച്ച് മൊഡ്യൂളുകൾക്കും ഘടകങ്ങൾക്കുമുള്ള സ്ഥാനങ്ങൾ നിർവചിക്കുകയും ഈ മൊഡ്യൂളുകളും ഘടകങ്ങളും പ്രദർശിപ്പിക്കുകയും ചെയ്യുന്നു.
- പേജ് ടെംപ്ലേറ്റ്
- മൊഡ്യൂൾ ടെംപ്ലേറ്റുകൾ
- ഘടക ടെംപ്ലേറ്റുകൾ

ഈ വലിയ ബ്ലോക്കുകളിൽ ഓരോന്നും എഡിറ്റ് ചെയ്യാൻ (മാറ്റങ്ങൾ) ലഭ്യമാണ്. അതായത്, നിങ്ങൾക്ക് വെവ്വേറെ എഡിറ്റ് ചെയ്യാം, ഉദാഹരണത്തിന്, ഏതെങ്കിലും മൊഡ്യൂൾ അല്ലെങ്കിൽ ഘടകത്തിൻ്റെ ടെംപ്ലേറ്റ്, അത് പേജിൽ പുതിയതായി കാണപ്പെടും. പേജ് ടെംപ്ലേറ്റിൻ്റെ കാര്യവും ഇതുതന്നെയാണ്.

പേജിൻ്റെ ഉള്ളടക്ക ഭാഗത്തിലെ ആദ്യ വരി പേജിൻ്റെ ശീർഷകമായി പ്രദർശിപ്പിക്കുകയും ഈ പേജിലേക്ക് ചൂണ്ടിക്കാണിക്കുന്ന മെനു ഇനത്തിൻ്റെ എഡിറ്റ് പേജിൽ എഡിറ്റ് ചെയ്യുകയും ചെയ്യുന്നു എന്ന് ഒരു തുടക്കക്കാരനായ പ്രോഗ്രാമർക്ക് മനസ്സിലാക്കാൻ പ്രയാസമാണ്. രണ്ടാമത്തെ വരി com_content അല്ലെങ്കിൽ com_weblinks ഘടക ടെംപ്ലേറ്റിൽ നിന്നാണ് ഉരുത്തിരിഞ്ഞത്. ടെംപ്ലേറ്റുകളിലെ സ്ട്രിംഗുകൾ സാധാരണയായി സ്ട്രിംഗ് വേരിയബിളുകളാണ്, അവയുടെ സമാരംഭവും പ്രാദേശികവൽക്കരണവും ഭാഷ\ru-RU\ru-RU.mod_weblinks.ini പോലുള്ള ഭാഷാ ഫയലുകളിലാണ് നടത്തുന്നത്.

സ്‌ക്രീൻ പേജിൽ അതേ ആഖ്യാനത്തിൻ്റെ യുക്തിസഹമായ തുടർച്ച പോലെ കാണപ്പെടുന്ന ഈ അല്ലെങ്കിൽ ആ വരി ഏത് ടെംപ്ലേറ്റ് നിർമ്മിച്ചുവെന്നത് ചിലപ്പോൾ ഒരു തുടക്കക്കാരനെ ആശയക്കുഴപ്പത്തിലാക്കുന്നു. ഒരു വരി ഒരു ടെംപ്ലേറ്റിലും മറ്റൊന്ന് രണ്ടാമത്തെ ടെംപ്ലേറ്റിലും മൂന്നാമത്തേത് മൂന്നാമത്തേതിലും ആണെന്ന് ഇത് മാറുന്നു. ചുവടെയുള്ള ടാബ് ചെയ്ത പട്ടിക mod_tabform മൊഡ്യൂൾ ടെംപ്ലേറ്റിൽ നിന്നുള്ള ഔട്ട്പുട്ടാണ്.

ചിലപ്പോൾ മൊഡ്യൂൾ ടെംപ്ലേറ്റുകളെ ലേഔട്ടുകൾ എന്ന് വിളിക്കുന്നു. എന്നാൽ ഇത് ടെർമിനോളജിയുടെ ചോദ്യമാണ്. സാരാംശം ഒന്നുതന്നെയാണ് - ഇത് ഉള്ളടക്കത്തിനുള്ള “വസ്ത്രം” ആണ്. അടയാളപ്പെടുത്തൽ എന്ന് പറയുന്നതായിരിക്കും കൂടുതൽ ശരി. അതിനാൽ, ഒരു സ്ക്രീൻ പേജിൻ്റെ മാർക്ക്അപ്പ് വ്യത്യസ്ത ജൂംല ഡയറക്ടറി ഫയലുകളിൽ സ്ഥിതി ചെയ്യുന്നു.

മെനു

പല പുതിയ ജൂംല പ്രോഗ്രാമർമാർക്കും മെനു ഇനങ്ങൾക്ക് വ്യത്യസ്ത തരങ്ങളുണ്ടാകാമെന്ന് പലപ്പോഴും മനസ്സിലാകുന്നില്ല. മറ്റൊരു വിധത്തിൽ പറഞ്ഞാൽ, മെനു ഇനങ്ങൾക്ക് വ്യത്യസ്ത തരത്തിലുള്ള ജൂംല ഒബ്ജക്റ്റുകളെ സൂചിപ്പിക്കാൻ കഴിയും. ഘടകങ്ങൾ (വോട്ടിംഗ്, തിരയൽ, ലിങ്ക് ഡയറക്‌ടറി മുതലായവ) പോലുള്ള വ്യത്യസ്ത വസ്തുക്കളാകാം.

ഒരു മെനു ഇനം തരം തിരഞ്ഞെടുക്കുന്നു:

കോൺടാക്റ്റുകൾ (com_contact)
കോൺടാക്റ്റ് വിഭാഗങ്ങളുടെ ലിസ്റ്റ് (വിഭാഗങ്ങൾ)
തന്നിരിക്കുന്ന വിഭാഗത്തിൻ്റെ കോൺടാക്റ്റുകളുടെ ലിസ്റ്റ് (വിഭാഗം)
ബന്ധപ്പെടുക
പ്രിയപ്പെട്ട കോൺടാക്റ്റുകൾ (ഫീച്ചർ ചെയ്‌തത്)

മെറ്റീരിയലുകൾ (com_content)
ആർക്കൈവ് മെറ്റീരിയലുകൾ (ആർക്കൈവ്)
മെറ്റീരിയൽ (ലേഖനം)
എല്ലാ വിഭാഗങ്ങളുടെയും പട്ടിക (വിഭാഗങ്ങൾ)
ബ്ലോഗ് വിഭാഗം
മെറ്റീരിയലുകളുടെ പട്ടിക (വിഭാഗം)
ഫീച്ചർ ചെയ്ത മെറ്റീരിയലുകൾ
മെറ്റീരിയൽ സൃഷ്ടിക്കുക

മികച്ച തിരയൽ (com_search)
തിരയുക

ഹലോ വേൾഡ്! (com_helloworld)
സന്ദേശം (ഹെല്ലോവേൾഡ്)

വാർത്താ ഫീഡുകൾ (com_newsfeeds)
എല്ലാ വാർത്താ ഫീഡ് വിഭാഗങ്ങളുടെയും ലിസ്റ്റ് (വിഭാഗങ്ങൾ)
വിഭാഗത്തിലെ വാർത്താ ഫീഡുകളുടെ ലിസ്റ്റ് (വിഭാഗം)
ന്യൂസ്ഫീഡ്

തിരയുക (com_search)
തിരയൽ ഫോമും തിരയൽ ഫലങ്ങളുടെ പട്ടികയും (തിരയൽ)

ഉപയോക്തൃ മാനേജർ (com_users)
അംഗീകാര ഫോം (ലോഗിൻ)
ഉപയോക്തൃ പ്രൊഫൈൽ (പ്രൊഫൈൽ)
ഉപയോക്തൃ പ്രൊഫൈൽ മാറ്റുക
രജിസ്ട്രേഷൻ ഫോം
ഉപയോക്തൃനാമം വീണ്ടെടുക്കൽ (ഓർമ്മപ്പെടുത്തുക)
പാസ്‌വേഡ് മാറ്റുന്നു (റീസെറ്റ്)

റാപ്പർ (com_wrapper)
റാപ്പർ

നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, ഇവിടെ എല്ലാ മെനു തരങ്ങളും ഘടകങ്ങളാണ്. അതിൻ്റെ പേരിൽ, മെനു ഇനം തരം യഥാർത്ഥത്തിൽ അതിൻ്റെ ഘടക തരത്തിൻ്റെ ടെംപ്ലേറ്റിൻ്റെ പേര് സൂചിപ്പിക്കുന്നു. ഘടക ടെംപ്ലേറ്റുകൾ കാഴ്ച ഡയറക്ടറികളിൽ സ്ഥിതിചെയ്യുന്നു:

joomla\components\com_weblinks\views\categories
joomla\components\com_weblinks\views\category
joomla\components\com_weblinks\views\weblink
joomla\components\com_users\views\login

നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, മെനുവിലെ ലിങ്ക് തരങ്ങളുടെ പേരുകളും vews ഡയറക്ടറികളിലെ ടെംപ്ലേറ്റുകളുടെ പേരുകളും ഒന്നുതന്നെയാണ്.

ഘടകങ്ങൾക്കായി പുതിയ നിലവാരമില്ലാത്ത ടെംപ്ലേറ്റുകൾ (ലേഔട്ടുകൾ) സൃഷ്ടിക്കാനുള്ള കഴിവ് ഡവലപ്പർക്ക് ഉണ്ട്. ഈ പുതിയ ലേഔട്ടുകൾ മെനു തരം തിരഞ്ഞെടുക്കൽ വിൻഡോയിൽ പുതിയ മെനു തരങ്ങളായി പ്രതിഫലിക്കും. ഇതൊരു പ്രത്യേക വിഷയമാണ്.

ജൂംല വിതരണ ഡെമോ ഉള്ളടക്കം

ഡിഫോൾട്ട് ഡെമോ ഉള്ളടക്കത്തിൽ (Beez2 - Default) ജൂംല ടെംപ്ലേറ്റിൽ com_weblinks ഘടകം പ്രദർശിപ്പിക്കുന്നതിന് "ജൂംലയെ കുറിച്ച്" മെനു ഇനങ്ങളുടെ ശ്രേണി എങ്ങനെയാണ് നിർമ്മിച്ചിരിക്കുന്നത് എന്ന് നോക്കാം.

Com_weblinks ഘടകം എഡിറ്റ് ചെയ്യാൻ നമുക്ക് അഡ്മിൻ പാനലിലേക്ക് പോകാം: Components->Links. വിതരണത്തോടൊപ്പം വരുന്ന ഡെമോ ഉള്ളടക്കത്തിൽ, com_weblinks ഘടകത്തിനായി അഞ്ച് വിഭാഗങ്ങൾ സൃഷ്‌ടിച്ചതായി ഞങ്ങൾ കാണുന്നു. ഇതിനർത്ഥം ലിങ്കുകൾ അഞ്ച് വിഭാഗങ്ങളായി വിതരണം ചെയ്യും. സൃഷ്ടിച്ച എല്ലാ വിഭാഗങ്ങളും #_വിഭാഗങ്ങളുടെ ഡാറ്റാബേസ് പട്ടികയിൽ സംരക്ഷിക്കപ്പെടും. മറ്റ് ഘടകങ്ങൾക്കുള്ള വിഭാഗങ്ങളും ഒരേ പട്ടികയിൽ സംഭരിച്ചിരിക്കുന്നു.

സാമ്പിൾ ഡാറ്റ-വെബ്ലിങ്കുകൾ
|-പാർക്ക് ലിങ്കുകൾ
|-ജൂംല! പ്രത്യേക ലിങ്കുകൾ
|-|-മറ്റ് വിഭവങ്ങൾ
തരംതിരിച്ചിട്ടില്ല

ജൂംലയെക്കുറിച്ച് മെനുവിൽ (മെനു എഡിറ്ററിൽ), അതിനനുസരിച്ച് മെനു ഇനങ്ങളുടെ ഒരു ശ്രേണി സൃഷ്ടിച്ചിരിക്കുന്നു:

മെനു ഇനങ്ങളുടെ ശ്രേണി:

ജൂംല ഉപയോഗിക്കുന്നു! (തരം: മെറ്റീരിയൽ)
|-ഉപയോഗിക്കുന്ന വിപുലീകരണങ്ങൾ (തരം: എല്ലാ വിഭാഗങ്ങളുടെയും പട്ടിക) :: മെറ്റീരിയലുകളിലെ വിഭാഗങ്ങളുടെ പട്ടിക
|-|-ഘടകങ്ങൾ (തരം: വിഭാഗം ബ്ലോഗ്) :: മെറ്റീരിയലുകളിലെ വിഭാഗം
|-|-|-വെബ്ലിങ്ക് ഘടകം (തരം: മെറ്റീരിയൽ)
|-|-|-|-ഒരു വെബ്‌ലിങ്ക് സമർപ്പിക്കുക (തരം: ലിങ്ക് സൃഷ്‌ടിക്കുക) :: ലിങ്ക് ഘടകത്തിൽ
|-|-|-|-Weblinks സിംഗിൾ വിഭാഗം (തരം: ഒരു വിഭാഗത്തിലെ ലിങ്കുകളുടെ ലിസ്റ്റ്) :: ലിങ്ക് ഘടകത്തിൽ
|-|-|-|-വെബ്ലിങ്ക് വിഭാഗങ്ങൾ (തരം: ലിങ്ക് വിഭാഗങ്ങളുടെ പട്ടിക) :: ലിങ്ക് ഘടകത്തിൽ

ചില മെനു ഇനങ്ങൾക്ക് തരങ്ങൾ ഉള്ളതായി ഞങ്ങൾ കാണുന്നു: വിഭാഗങ്ങളുടെ ലിസ്റ്റ്, ഒരു വിഭാഗത്തിലെ ലിങ്കുകളുടെ ലിസ്റ്റ്, ലിങ്ക് സൃഷ്‌ടിക്കുക.
"ലിങ്ക് വിഭാഗങ്ങളുടെ പട്ടിക" ശ്രേണി കാണിക്കുന്ന ഏറ്റവും മികച്ച വിഭാഗത്തെ വ്യക്തമാക്കുന്നു.
"ഒരു വിഭാഗത്തിലെ ലിങ്കുകളുടെ ലിസ്റ്റ്" ആരുടെ ലിങ്കുകൾ പ്രദർശിപ്പിക്കും എന്ന് വ്യക്തമാക്കുന്നു.
"ലിങ്ക് സൃഷ്‌ടിക്കുക" എന്ന ഇനത്തിൽ, രജിസ്റ്റർ ചെയ്ത ഉപയോക്താവ് പൂരിപ്പിക്കേണ്ട ഒരു ഫോം പ്രദർശിപ്പിക്കും.
വഴിയിൽ, എഡിറ്ററിൽ ഈ ഫോമിലേക്കുള്ള ലിങ്ക് ഇങ്ങനെയാണ് കാണപ്പെടുന്നത് (വിലാസ ബാറിൽ അതിൻ്റെ രൂപം മാറും):

index.php?option=com_weblinks&view=form&layout=edit

ചില മെനു ഇനങ്ങൾ രജിസ്റ്റർ ചെയ്ത ഉപയോക്താക്കൾക്ക് മാത്രമേ കാണിക്കാൻ കഴിയൂ! ഉദാഹരണത്തിന്, "ലിങ്ക് സൃഷ്‌ടിക്കുക" എന്ന തരത്തിലുള്ള ഒരു മെനു ഇനം രജിസ്റ്റർ ചെയ്ത ഉപയോക്താക്കൾക്ക് മാത്രമേ ദൃശ്യമാകൂ. രജിസ്റ്റർ ചെയ്ത ഉപയോക്താക്കൾക്ക് പേജിൽ പോസ്റ്റുചെയ്യുന്ന ലിങ്കുകൾ സൃഷ്‌ടിക്കുന്നതിന് ഈ സവിശേഷത പ്രത്യേകമായി സൃഷ്‌ടിച്ചതാണ്.

അങ്ങനെ, com_weblinks ഘടകം രസകരമായ ലിങ്കുകളുള്ള ഒരു പേജ് സംവേദനാത്മകമായി പോപ്പുലേറ്റ് ചെയ്യുന്നതിനുള്ള ഒരു നല്ല മാർഗം നൽകുന്നു. മാത്രമല്ല, അത്തരമൊരു പേജിൽ സ്ഥാപിക്കുന്ന എല്ലാ ലിങ്കുകൾക്കും ഒരു റീഡയറക്‌ട് ഉണ്ട്, അതായത്, അവ ബാഹ്യമായി സൂചികയിലാക്കില്ല. ഫോറങ്ങളിൽ ഇത്തരം ലിങ്കുകൾ നിങ്ങൾ കണ്ടിട്ടുണ്ടാകും. അത്തരമൊരു ലിങ്കിൽ നിങ്ങളുടെ മൗസ് ഹോവർ ചെയ്യുമ്പോൾ, നിങ്ങളുടെ സൈറ്റിൻ്റെ വിലാസം നിങ്ങൾ കാണും, അതിൽ ക്ലിക്കുചെയ്തതിനുശേഷം മാത്രമേ നിങ്ങൾ വ്യക്തമാക്കിയ വിലാസത്തിലേക്ക് നിങ്ങളെ റീഡയറക്‌ട് ചെയ്യുകയുള്ളൂ.

പുതിയ ഉള്ളടക്കം - ലേഖനങ്ങൾ, ചിത്രങ്ങൾ, വീഡിയോ ഫയലുകൾ മുതലായവ ചേർക്കാനുള്ള ഉപയോക്താവിനുള്ള കഴിവ് പോലെ തന്നെ, ബാഹ്യ സൈറ്റുകളിലേക്ക് ലിങ്കുകൾ ചേർക്കാനുള്ള ഉപയോക്താവിനുള്ള കഴിവാണ് com_weblinks ഘടകത്തിൻ്റെ പ്രധാന നേട്ടവും അർത്ഥവും.

നേരിട്ടുള്ള കോഡിംഗ് ഇല്ലാതെ ഉള്ളടക്കം ഉപയോഗിച്ച് സൈറ്റ് പൂരിപ്പിക്കുന്നതിന് അവകാശമുള്ള ഒരു രജിസ്റ്റർ ചെയ്ത ഉപയോക്താവിനെ അനുവദിക്കുന്നത് CMS ജൂംലയുടെ അടിസ്ഥാന തത്വമാണ്.

തരംതിരിച്ചിട്ടില്ല
സാമ്പിൾ ഡാറ്റ-ലേഖനങ്ങൾ
|- ജൂംല!
|-|- വിപുലീകരണങ്ങൾ
|-|-|- ഘടകങ്ങൾ
|-|-|- മൊഡ്യൂളുകൾ
|-|-|-|- ഉള്ളടക്ക മൊഡ്യൂളുകൾ
|-|-|-|- ഉപയോക്തൃ മൊഡ്യൂളുകൾ
|-|-|-|- ഡിസ്പ്ലേ മൊഡ്യൂളുകൾ
|-|-|-|- യൂട്ടിലിറ്റി മൊഡ്യൂളുകൾ
|-|-|-|- നാവിഗേഷൻ മൊഡ്യൂളുകൾ
|-|-|- ടെംപ്ലേറ്റുകൾ
|-|-|-|- ആറ്റോമിക്
|-|-|-|- ബീസ് 20
|-|-|-|- ബീസ് 5
|-|-|- ഭാഷകൾ
|-|-|- പ്ലഗിനുകൾ
|- പാർക്ക് സൈറ്റ്
|-|- പാർക്ക് ബ്ലോഗ്
|-|- ഫോട്ടോ ഗാലറി
|-|-|- മൃഗങ്ങൾ
|-|-|- സീനറി
|- ഫ്രൂട്ട് ഷോപ്പ് സൈറ്റ്
|-|- കർഷകർ
|-|- പാചകക്കുറിപ്പുകൾ

ഉള്ളടക്കത്തിനായി വളരെയധികം വിഭാഗങ്ങൾ ഉള്ളതായി തോന്നുന്നില്ല!
ഡാറ്റാബേസിലെ കാറ്റഗറി ടേബിളിലേക്കുള്ള ഒരു ചോദ്യം ഉപയോഗിച്ച് നിങ്ങൾക്ക് മെറ്റീരിയലുകളിലെ വിഭാഗങ്ങളുടെ ശ്രേണി കാണാനും കഴിയും:

`#_categories` എന്നതിൽ നിന്ന് തിരഞ്ഞെടുക്കുക * എവിടെ `വിപുലീകരണം` = "com_content"

ലൈൻ മാറ്റിസ്ഥാപിക്കുന്നതിനായി cleanText ഫംഗ്‌ഷനിലെ /includes/joomla.php ഫയലിൽ ഒരു നിർദ്ദേശമുണ്ട്.

$ ടെക്സ്റ്റ് = സ്ട്രിപ്പ്_ടാഗുകൾ ($ ടെക്സ്റ്റ്); $text = സ്ട്രിപ്പ്_ടാഗുകൾ ( $text , " " ) ;

ഈ ഹാക്ക് സാധാരണ ചിത്രങ്ങളായി തിരുകിയ ചിത്രങ്ങൾക്കായി മാത്രം ഉദ്ദേശിച്ചുള്ളതാണ്. ഒരു മാമ്പോട്ട് (മോസിമേജ്) ചേർത്ത ചിത്രങ്ങൾക്കായി, ഈ ഹാക്ക് പ്രവർത്തിക്കില്ല.

com_weblinks ഘടകത്തിൽ ഒരു നേരിട്ടുള്ള ലിങ്ക് എങ്ങനെ ദൃശ്യമാക്കാം

weblinks.html.php-ൽ നിങ്ങൾ ലൈൻ മാറ്റിസ്ഥാപിക്കേണ്ടതുണ്ട്:

$link = sefRelToAbs( "index.php?option=com_weblinks&task=view&catid=". $catid ."&id=". $row ->id ) ; $link = $row ->url ; ഒരേ സമയം രണ്ട് ഹോസ്റ്റുകളിൽ (ഡൊമെയ്‌നുകൾ) ജൂംല എങ്ങനെ പ്രവർത്തിക്കാം. ആ. ഉദാഹരണത്തിന്, പ്രാദേശിക നെറ്റ്‌വർക്കിൽ 10.0.0.15-ലും ഇൻ്റർനെറ്റ് സൈറ്റ്-firmy.ru-ൽ നിന്നും. രണ്ട് വിലാസങ്ങളും ഒരേ മെഷീനിൽ നൽകിയിട്ടുണ്ടെങ്കിലും.

ഒന്നാമതായി, ഇൻസ്റ്റലേഷൻ സമയത്ത് നൽകിയ സൈറ്റിൻ്റെ അടിസ്ഥാന വിലാസമായ $mosConfig_live_site വേരിയബിളുമായി ബന്ധപ്പെട്ട എല്ലാ ചിത്രങ്ങളും CSS ഫയലുകളും (ടെംപ്ലേറ്റിലെ അവയുടെ പാതകൾ) ജൂംല പ്രദർശിപ്പിക്കുന്നു എന്നതാണ് പ്രശ്നത്തിൻ്റെ മുഴുവൻ പോയിൻ്റ്. ആരെങ്കിലും മറ്റൊരു വിലാസം ഉപയോഗിച്ച് അത് ആക്‌സസ് ചെയ്യാൻ ശ്രമിക്കുകയാണെങ്കിൽ, അതിൻ്റെ പ്രവർത്തനത്തിൻ്റെ യുക്തിയിൽ ഒന്നും മാറില്ല - അടിസ്ഥാന വിലാസം കോൺഫിഗറേഷൻ ഫയലിൽ നിന്ന് എടുത്തതാണ്. ഉദാഹരണത്തിന്, ജൂംല ലോക്കൽ ഹോസ്റ്റിലാണ് സ്ഥിതി ചെയ്യുന്നതെന്ന് കോൺഫിഗറേഷൻ പ്രസ്താവിച്ചാൽ, ലോക്കൽ നെറ്റ്‌വർക്കിൽ നിന്ന് ആക്‌സസ് ചെയ്യുന്നത്, 192.168.0.1 എന്ന വിലാസം ശരിയായി കോൺഫിഗർ ചെയ്‌തിരിക്കുന്ന അപ്പാച്ചെയിലേക്ക് പോലും, അതിൽ ഒന്നും മാറ്റില്ല - ചിത്രങ്ങളുടെ src ഇപ്പോഴും ആരംഭിക്കും. "localhost" ഉപയോഗിച്ച്, മറ്റ് മെഷീനുകൾക്ക് ഇതിനകം തന്നെ സ്വന്തം ലോക്കൽഹോസ്റ്റ് ഉണ്ടായിരിക്കും. അഭ്യർത്ഥിച്ച ഹോസ്റ്റിനായി $mosConfig_live_site വേരിയബിൾ മാറ്റിസ്ഥാപിക്കുക എന്നതാണ് അത്തരം സന്ദർഭങ്ങൾക്കുള്ള പരിഹാരങ്ങളുടെ ശ്രദ്ധ, അതുവഴി എല്ലാ ഫംഗ്‌ഷനുകൾക്കും ശരിയായ ലിങ്കുകൾ നൽകാനും ഇതിനകം തന്നെ ഉപയോക്താവിനെ നയിക്കാനും കഴിയും ഒന്നോ അതിലധികമോ വെർച്വൽ സൈറ്റ് (ചിത്രങ്ങളിലേക്കുള്ള ശരിയായ അടിസ്ഥാന പാതകളും വിലാസങ്ങളിലേക്കുള്ള അടിസ്ഥാന പാതകളും നൽകുക) ഇത് യാന്ത്രികമാക്കാൻ കഴിയുന്ന ഒരു ഓട്ടോ ലൈവ് സൈറ്റ് മാംബോട്ടുണ്ട്. ഇത് നിങ്ങൾക്ക് ഏതെങ്കിലും വിധത്തിൽ അനുയോജ്യമല്ലെങ്കിൽ, തത്വത്തിൽ ഇത് ആവർത്തിക്കാം. , ഇതിനായി $mosConfig_live_site നിർവചനത്തിൻ്റെ സ്ഥാനത്ത് configuration.php-ൽ നിങ്ങളുടെ കോഡ് എഴുതേണ്ടതുണ്ട്:

എങ്കിൽ ($_SERVER [ "HTTP_HOST" ] =="host1.ru" ) $mosConfig_live_site = "host1.ru" ; വേറെ $mosConfig_live_site = "host2.ru" ;

നിങ്ങൾ ഒരു കാഷെ ഉപയോഗിക്കുകയാണെങ്കിൽ, രണ്ട് ഹോസ്റ്റുകൾക്കായി നിങ്ങൾക്ക് രണ്ട് വ്യത്യസ്ത കാഷിംഗ് ഡയറക്‌ടറികളും ഉണ്ടായിരിക്കണം എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്, കാരണം വ്യത്യസ്ത ഹോസ്റ്റുകളിലേക്കുള്ള ലിങ്കുകൾ കാഷെയിൽ വിഭജിച്ചേക്കാം, തുടർന്ന് തെറ്റായ നെറ്റ്‌വർക്കിൽ നിന്നുള്ള ഒരു ഉപയോക്താവ് എവിടെയും എത്തില്ല. . കാഷെയുടെ ഉത്തരവാദിത്തം $mosConfig_cachepath വേരിയബിളാണ്.

ഒരു പേജിൽ ഒരേസമയം രണ്ട് ഘടകങ്ങൾ എങ്ങനെ ദൃശ്യമാക്കാം

ഞാൻ ഉടൻ തന്നെ നിങ്ങളോട് പറയും - എല്ലാം അത്ര ലളിതമല്ല. എല്ലാത്തിനുമുപരി, ഇത് ഒരു മൊഡ്യൂൾ അല്ല. അതിനാൽ, ഒന്നാമതായി, ഒരു ബദൽ തിരയുന്നത് മൂല്യവത്താണ്, അതായത്. തീർച്ചയായും ഒരു ജനപ്രിയ ഘടകം അതിൻ്റെ പ്രവർത്തനക്ഷമത ആവർത്തിക്കാൻ കഴിയുന്ന മൊഡ്യൂളുകളുമായി വരുന്നു. അങ്ങനെയൊന്നും ഇല്ലെങ്കിൽ ഇതൊരു ഓപ്ഷനാണ്. ഇത് ഒരു മൊഡ്യൂളായി നിർമ്മിക്കാം, അല്ലെങ്കിൽ, സിദ്ധാന്തത്തിൽ, ഇത് ഒരു ടെംപ്ലേറ്റിൽ ചേർക്കാം. ആശയം ഇതാണ് - index2.php വഴി ഘടകത്തെ വിളിക്കുന്നു (എന്ത്, എന്തുകൊണ്ട് - മുഴുവൻ വസ്തുതയും വായിക്കുക). ആ. രണ്ടാമത്തെ ഘടകത്തിന് ആവശ്യമുള്ള ഇൻസെർഷൻ പോയിൻ്റിൽ നിങ്ങൾക്ക് src="index2.php?option=com_component&no_html=1" ഉപയോഗിച്ച് ഒരു iframe ഉണ്ടാക്കാം. അത് അവിടെ പ്രദർശിപ്പിക്കുകയും ചെയ്യും. മറ്റൊരു കാര്യം, പ്രവർത്തനം പൂർണ്ണമായും ഉറപ്പാക്കാൻ സാധ്യതയില്ല എന്നതാണ്. എന്നിരുന്നാലും, ഇത് ഒരു പോംവഴിയാണ്.

അല്ലെങ്കിൽ നിർമ്മാണം ഉപയോഗിക്കുക: mosLoadComponent("com_mycomp" );

പക്ഷേ, ഘടകം ഈ രീതിയിൽ നടപ്പിലാക്കുകയാണെങ്കിൽ, അതിന് നിങ്ങളുടെ കൃത്രിമത്വങ്ങളെക്കുറിച്ച് അറിയില്ലെന്നും അതിൻ്റെ $option, $task എന്നിവ അനുസരിച്ച് പ്രവർത്തിക്കുമെന്നും നിങ്ങൾ മനസ്സിലാക്കേണ്ടതുണ്ട്.

ഒരു ലേഖനത്തിലെ ശീർഷകത്തിൻ്റെ ദൈർഘ്യം എങ്ങനെ വർദ്ധിപ്പിക്കാം

നിങ്ങൾ ഇനിപ്പറയുന്ന രണ്ട് കമാൻഡുകൾ phpMyAdmin-ൽ പ്രവർത്തിപ്പിക്കേണ്ടതുണ്ട് (SQL അന്വേഷണങ്ങൾ നടപ്പിലാക്കുന്നതിനായി ഒരു പ്രത്യേക പേജ് ഉണ്ട്), നിങ്ങളുടെ യഥാർത്ഥ ടേബിൾ പ്രിഫിക്സ് ഉപയോഗിച്ച് ###_ മാറ്റിസ്ഥാപിക്കുക. സാധ്യമായ പരമാവധി സംഖ്യ 255 ആണ്. ഉദാഹരണത്തിൽ, 200 ഉപയോഗിക്കുന്നു.

ALTER TABLE `###_content` മാറ്റുക `ശീർഷകം_അപരനാമം` `ശീർഷകം_അപരനാമം` VARCHAR(200) അസാധുവല്ല; ALTER TABLE `###_content` മാറ്റുക `ശീർഷകം` `ശീർഷകം` VARCHAR(200) ശൂന്യമല്ല;

നിങ്ങളുടെ RSS ഫീഡിൽ അവയുടെ തലക്കെട്ടുകൾ മാത്രമല്ല, മുഴുവൻ വാർത്താ വാചകങ്ങളും എങ്ങനെ ഉൾപ്പെടുത്താം

ഇത് ചെയ്യുന്നതിന്, /components/com_rss/rss.php എന്ന ഫയലിൽ, നിങ്ങൾ മാറ്റിസ്ഥാപിക്കേണ്ടതുണ്ട്

$item_description = $row ->introtext ; $item_description = $row ->fulltext ; ഒരേ ഡാറ്റാബേസ് ഉപയോഗിച്ചോ ഒരേ ഫയലുകൾ ഉപയോഗിച്ചോ എനിക്ക് എങ്ങനെ രണ്ട് ജൂംല സൈറ്റുകൾ നിർമ്മിക്കാനാകും?

ഒരു ഡാറ്റാബേസ് ഉപയോഗിക്കുന്നതിന്, നിങ്ങൾ രണ്ട് എഞ്ചിനുകൾക്കായി configuration.php-ൽ ഒരു ഡാറ്റാബേസ് എഴുതേണ്ടതുണ്ട്, എന്നാൽ നിങ്ങൾ എന്താണ് ചെയ്യുന്നതെന്ന് നിങ്ങൾ മനസ്സിലാക്കേണ്ടതുണ്ട്. ഈ സാഹചര്യത്തിൽ ഉപയോക്താക്കൾക്കായി സെഷനുകൾ പരിപാലിക്കുന്നത് വളരെ പ്രശ്നമായിരിക്കും, കാരണം ഡൊമെയ്‌നുകൾ വ്യത്യസ്തമാണ്. ആ. #__സെഷൻസ് പട്ടികയിലെ ലോഗിൻ എൻട്രികൾ (മെയ്) ഓവർലാപ്പ് ചെയ്യും.

ഒരു വലിയ വിതരണം പകർത്താതെ ഒരേ ഫയലുകൾ ഉപയോഗിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, തത്വത്തിൽ നിങ്ങൾക്ക് നിലവിലുള്ള ഫയലുകളിലേക്ക് പ്രതീകാത്മക ലിങ്കുകൾ സൃഷ്ടിക്കുന്നതിനും പുതിയ സൈറ്റിനായി അവ പകർത്താതിരിക്കുന്നതിനും ലിനക്സിലെ “ln -s” കമാൻഡ് ഉപയോഗിക്കാം.

പൊതുവായ ജൂംല ഡിസൈനിൽ (http:/ /site.ru/super_page) ഒരു പ്രത്യേക വിലാസത്തിൽ ആക്സസ് ചെയ്യാവുന്ന ഒരു വെർച്വൽ പേജ് എങ്ങനെ സൃഷ്ടിക്കാം
  • ഒരു സ്റ്റാറ്റിക് പേജിനായി നിങ്ങൾ ആഗ്രഹിക്കുന്ന വെർച്വൽ പാത്ത് വ്യക്തമാക്കുന്ന ഏതെങ്കിലും തരത്തിലുള്ള SEF ഘടകം ഉപയോഗിക്കുക എന്നതാണ് ആദ്യ മാർഗം. ഇവിടെ ഒരു മൈനസ് ഉണ്ട് - ഈ ഘടകം മറ്റെല്ലാ ലിങ്കുകളും റീമേക്ക് ചെയ്യാൻ തുടങ്ങും (സാധാരണയായി ഈ ഘടകങ്ങൾ വളരെ ഊർജ്ജസ്വലമായതിനാൽ പ്രവർത്തിക്കാൻ ധാരാളം വിഭവങ്ങൾ ആവശ്യമാണ്).
  • mod_rewrite, .htaccess എന്നിവ ഉപയോഗിച്ച് അത്തരമൊരു പേജിന് ഒരു അപരനാമം സൃഷ്ടിക്കുക. ഇത് ചെയ്യുന്നതിന് നിങ്ങൾക്ക് ഇത് ആവശ്യമാണ്:
    • നിങ്ങൾക്ക് ആവശ്യമുള്ള ടെക്‌സ്‌റ്റ് ഉപയോഗിച്ച് ഒരു സ്റ്റാറ്റിക് പേജ് സൃഷ്‌ടിക്കുക, അതിൻ്റെ ഐഡിയും വിലാസവും കണ്ടെത്തുക (അത്തരം ഒരു പേജ് സൃഷ്‌ടിക്കേണ്ട ആവശ്യമില്ല, അത് ഇതിനകം നിലവിലുണ്ടാകാം, പൊതുവെ ഇത് ഏതെങ്കിലും ഘടകം മാത്രമാണ്, com_content ആവശ്യമില്ല)
    • ഒരു അപരനാമം കൊണ്ട് വരൂ, അത് "സൂപ്പർ_പ്യൂപ്പർ" ആയിരിക്കട്ടെ
    • .htaccess തുറന്ന് "RewriteCond %(REQUEST_FILENAME) !-f" എന്ന വരിക്ക് മുമ്പ് എഴുതുക:
RewriteRule ^(super_puper) index.php?option=com_content&task=view&id=12 RewriteCond %(REQUEST_FILENAME) !-f
    • ഇപ്പോൾ, സൈറ്റ്.ru എന്നതിൽ ജൂംല സ്ഥിതിചെയ്യുന്നുണ്ടെങ്കിൽ, നിങ്ങൾ http://site.ru/super_puper ലിങ്ക് തുറക്കുമ്പോൾ നിങ്ങളുടെ വിവരങ്ങളുള്ള ആവശ്യമായ സ്റ്റാറ്റിക് പേജ് തുറക്കും. "index.php?option=com_content&task=view&id=12" എന്ന ലിങ്ക് തന്നെ നിങ്ങൾക്ക് ആവശ്യമുള്ളതെന്തും ആകാം, പ്രധാന കാര്യം ലിങ്ക് കേവലമല്ല (അതായത് http:/ /...) എന്നാൽ ആപേക്ഷികമാണ് (സൂചികയിൽ തുടങ്ങണം .php?...)
ഒരു നിർദ്ദിഷ്‌ട ലേഖനത്തിനായി കാഷെ ചെയ്യുന്നത് എങ്ങനെ പ്രവർത്തനരഹിതമാക്കാം

നിങ്ങൾ rd_addphp mambot ഉപയോഗിക്കുകയാണെങ്കിൽ, ജൂംല കാഷിംഗ് സിസ്റ്റം പരിഗണിക്കാതെ തന്നെ, ക്രമരഹിതമായ സംഖ്യകളോ ക്രമരഹിതമായ ടെക്‌സ്‌റ്റോ സൃഷ്‌ടിക്കുന്ന ഏതെങ്കിലും സ്‌ക്രിപ്‌റ്റുകൾ ചേർക്കാൻ ഇത് ആവശ്യമായി വന്നേക്കാം. ഒരു നിശ്ചിത ഇനത്തിൻ്റെ കാഷിംഗ് പ്രവർത്തനരഹിതമാക്കുന്നതിന്, നിങ്ങൾ അതിൻ്റെ ഐഡി കണ്ടെത്തേണ്ടതുണ്ട് (അഡ്മിൻ പാനലിൽ, എഡിറ്റ് ചെയ്യുമ്പോൾ, വിലാസ ബാറിൽ നോക്കുക, അത് "...&id=123..." എന്ന് പറയും). അതിനാൽ 123 നമ്മുടെ ലേഖന ഐഡി ആയിരിക്കും. 1600 വരിയിൽ ഏകദേശം /components/com_content/content.php ഫയലിൽ മാറ്റിസ്ഥാപിക്കേണ്ടത് ആവശ്യമാണ്.

$cache ->കോൾ ( "HTML_content::show" , $row , $params , $access , $page ) ; എങ്കിൽ ($row ->id !="123" ) $cache ->കോൾ ( "HTML_content::show" , $row , $params , $access , $page ) ; മറ്റുള്ളവ HTML_content::show ($row, $params, $access, $page) ;

നിങ്ങൾക്ക് ആവശ്യമുള്ള ലേഖന ഐഡി 123 ആണ്.

ഞാൻ ഒരുപാട് ഘടകങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്തു, പക്ഷേ അഡ്മിൻ മെനുവിലെ ഘടകങ്ങളുടെ ലിസ്റ്റ് അവയുടെ എണ്ണം കുറച്ചതായി കാണിക്കുന്നു, തുടർന്ന് അത് "കൂടുതൽ ഘടകങ്ങൾ ..." എന്ന് പറയുന്നു. എല്ലാ ഘടകങ്ങളും എങ്ങനെ പ്രദർശിപ്പിക്കാം.

/administrator/modules/mod_fullmenu.php എന്ന ഫയലിൽ നിങ്ങൾക്ക് ഒരു ലൈൻ ആവശ്യമാണ്

$topLevelLimit = 19 ;

മാറ്റിസ്ഥാപിച്ചു

$topLevelLimit = 199 ; ഒരു ഘടകത്തിൻ്റെ ഒരു പകർപ്പ് എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം

ദൗത്യം അങ്ങേയറ്റം ബുദ്ധിമുട്ടാണെന്ന് പറയണം. ഘടകം എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് നിങ്ങൾക്ക് മനസ്സിലാകുന്നില്ലെങ്കിൽ, നിങ്ങൾ ശ്രമിക്കേണ്ടതില്ല. ഇപ്പോഴും പ്രധാന പോയിൻ്റുകൾ ശ്രദ്ധിക്കാൻ ആഗ്രഹിക്കുന്നവർക്ക്:

  • XML ഫയലിൽ, നെയിം ടാഗിലെ ഘടകത്തിൻ്റെ പേര് പുനർനാമകരണം ചെയ്യുക
  • അടുത്തതായി, നിങ്ങൾ ഉപയോഗിച്ച പട്ടികകളുടെ പേര് മാറ്റേണ്ടതുണ്ട് (ആദ്യം XML ഫയലിലും രണ്ടാമതായി എല്ലാ ഘടക ഫയലുകളിലും, എവിടെയായിരുന്നാലും $database ഡാറ്റാബേസ് ഒബ്ജക്റ്റും setQuery രീതിയും ഉപയോഗിക്കുന്നു)
  • ഘടകങ്ങളിൽ എല്ലാ പാതകളും പുനർനാമകരണം ചെയ്യുക. പാത്തുകൾ അവയിലേക്കുള്ള റഫറൻസുകളിലോ ഉൾപ്പെടുത്തിയ ഫയലുകളുടെ പേരുകളിലോ ഉപയോഗിക്കാം. മിക്കപ്പോഴും ഇത് com_componentname എന്ന സബ്‌സ്ട്രിംഗ് തിരയുന്നതിനും പുതിയൊരെണ്ണം ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നതിനും വേണ്ടി വരുന്നു.

എന്നാൽ ഈ രീതി ഒന്നും ഉറപ്പ് നൽകുന്നില്ല. ലളിതമായവ ഉപയോഗിച്ച്, ഇത് സാധ്യമാണ്, കടന്നുപോകും, ​​എന്നാൽ സങ്കീർണ്ണമായവയിൽ, ആർക്കും ഉറപ്പ് നൽകാൻ കഴിയില്ല.

ഒരു സ്ഥാനം ക്രമരഹിതമായി എങ്ങനെ നിർമ്മിക്കാം, അതിനായി നൽകിയിരിക്കുന്ന മൊഡ്യൂളുകളിൽ ഒന്ന് കാണിക്കുക
  • ഓപ്ഷൻ 1 - mosLoadModules ഫംഗ്ഷൻ ഹാക്ക് ചെയ്യുക. ടെംപ്ലേറ്റിൽ, N മൊഡ്യൂളുകളിൽ ഒന്ന് പ്രദർശിപ്പിക്കേണ്ട സ്ഥലത്ത്, ഞങ്ങൾ എഴുതുന്നു (മൂന്നാമത്തെ വാദം ശ്രദ്ധിക്കുക):
mosLoadModules("സ്ഥാനം", display_setup,true);

മുകളിലുള്ള പ്രവർത്തനം തന്നെ ഞങ്ങൾ ചെറുതായി ശരിയാക്കുന്നു:

ഫംഗ്ഷൻ mosLoadModules( $position = "left" , $style =0 , $show_random = false ) (... $allModules =& initModules() ; എങ്കിൽ (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 ) ;) //പ്രസ്താവനയുടെ അവസാനം എങ്കിൽ (എണ്ണം ($മൊഡ്യൂളുകൾ)< 1 ) { $style = 0 ; }

ഞങ്ങൾ അതിൽ മൂന്നാമത്തെ ആർഗ്യുമെൻ്റ് ചേർത്തു (അത് ടെംപ്ലേറ്റിൽ ഉപയോഗിക്കുന്നു, അവിടെ ഞങ്ങൾ ശരി എന്ന് എഴുതിയിരിക്കുന്നു) കൂടാതെ കോഡ് പരിഷ്ക്കരിച്ചു.

  • ഓപ്ഷൻ രണ്ട് കൂടുതൽ വേദനയില്ലാത്തതാണ്, ഞങ്ങൾ ടെംപ്ലേറ്റ് മാത്രമേ പരിഷ്കരിക്കൂ. എന്നാൽ കൂടുതൽ അധ്വാനം - നമുക്ക് നിരവധി സ്ഥാനങ്ങൾ സൃഷ്ടിക്കേണ്ടതുണ്ട്. ആദ്യം, ഞങ്ങൾ നിരവധി പുതിയ മൊഡ്യൂൾ സ്ഥാനങ്ങൾ സൃഷ്ടിക്കുന്നു, ഉദാഹരണത്തിന് new1 ... new10. രക്ഷിക്കും. ടെംപ്ലേറ്റിലെ ശരിയായ സ്ഥലത്ത്, mosLoadModules ഫംഗ്ഷൻ വിളിക്കുന്നതിന് മുമ്പ്, ആവശ്യമായ കോഡ് ചേർക്കുക:
$rand_num = റാൻഡ് (1 ,10 ) ;//1 മുതൽ 10 വരെ - mosLoadModules എന്ന സ്ഥാന നാമത്തിലെന്നപോലെ ("പുതിയ" .$rand_num , display_settings) ; /അഡ്‌മിനിസ്‌റേറ്റർ/ ഫോൾഡറിൻ്റെ പേര് മാറ്റുന്നതിലൂടെ ഞാൻ എൻ്റെ സൈറ്റ് കൂടുതൽ സുരക്ഷിതമാക്കുമെന്ന് ഞാൻ വിശ്വസിക്കുന്നു

ഈ ഓപ്ഷൻ സ്റ്റാൻഡേർഡ് ആയി നൽകിയിട്ടില്ല. എന്നാൽ വാസ്തവത്തിൽ, ജൂംല ഫയലുകളിൽ ഒരു തിരയൽ സംഘടിപ്പിക്കുന്നതിലൂടെ, അത്തരമൊരു പദത്തിൻ്റെ ഏതെങ്കിലും സംഭവത്തെ നിങ്ങളുടേത് - രഹസ്യം ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാൻ കഴിയും. ചിലപ്പോൾ, പിന്നീട്, ഫയലുകൾ ആക്‌സസ് ചെയ്യാനുള്ള കഴിവില്ലായ്മയെക്കുറിച്ചുള്ള പിശകുകൾ പോപ്പ് അപ്പ് ചെയ്‌തേക്കാം, പക്ഷേ ഫയലും ലൈൻ നമ്പറും അറിയുന്നതിലൂടെ അവ ശരിയാക്കാനാകും. അതിനാൽ, പ്രശ്നം, തത്വത്തിൽ, പരിഹരിക്കാവുന്നതാണ്.

ഈ മാസം, ബഗ് ഡിഗർമാർ ജനപ്രിയ ആപ്ലിക്കേഷനുകളിലെ പുതിയ ഉയർന്ന പ്രൊഫൈൽ ചൂഷണങ്ങൾ ഉപയോഗിച്ച് ഞങ്ങളെ നശിപ്പിക്കാൻ ആഗ്രഹിക്കുന്നില്ല. തീർച്ചയായും, അറിയപ്പെടുന്ന കമ്പനികളുടെ ഉൽപ്പന്നങ്ങളിൽ ധാരാളം ഉപദേശങ്ങൾ പ്രസിദ്ധീകരിച്ചിട്ടുണ്ട്, എന്നാൽ അവയിൽ വളരെ കുറച്ച് മാത്രമേ വായിക്കാനാകുന്ന PoC കോഡുകൾ അടങ്ങിയിട്ടുള്ളൂ. ഞങ്ങളുടെ അവലോകനത്തിൽ, അടുത്തിടെ വിവരിച്ച ഏറ്റവും പ്രധാനപ്പെട്ടതും സമ്പൂർണ്ണവുമായ കേടുപാടുകൾ ശേഖരിക്കാൻ ഞാൻ ശ്രമിച്ചു, അതിനാൽ ഇരുന്ന് വായന ആസ്വദിക്കൂ.

HTTP ഹെഡ് അഭ്യർത്ഥനകൾ പ്രോസസ്സ് ചെയ്യുമ്പോൾ PHP ദുർബലത

മാർച്ച് 3 ന്, ഒരു നിശ്ചിത ആദം ഇവാൻയുക്ക് PHP ഇൻ്റർപ്രെറ്ററിൽ രസകരമായ ഒരു സവിശേഷത കണ്ടെത്തി, അത് HEAD അഭ്യർത്ഥനകൾ ശരിയായി പ്രോസസ്സ് ചെയ്യുന്നില്ല. ഗവേഷകൻ ഈ ദുർബലതയെ "php സ്ക്രിപ്റ്റുകളിലെ HTTP HEAD രീതി ട്രിക്ക്" എന്ന് വിളിച്ചു.

പല കോഡർമാരും അവരുടെ PHP സ്ക്രിപ്റ്റുകൾ രൂപകൽപ്പന ചെയ്യുന്നു, അവയിൽ എഴുതിയിരിക്കുന്ന എല്ലാ നിർദ്ദേശങ്ങളും മധ്യത്തിൽ എവിടെയെങ്കിലും (പ്രത്യേകിച്ച് ചെറിയ സ്ക്രിപ്റ്റുകളിൽ) തകർക്കാതെ വിജയകരമായി നടപ്പിലാക്കുമെന്ന് പ്രതീക്ഷിക്കുന്നു. GET, POST, PUT രീതികൾ ഉപയോഗിച്ച് അന്തിമ ഉപയോക്താവ് സ്ക്രിപ്റ്റ് ആവശ്യപ്പെട്ടാൽ ഇതാണ് സംഭവിക്കുന്നത്.

എന്നാൽ മറ്റ് HTTP രീതികൾ ഉണ്ടെന്ന് നിങ്ങൾ അറിഞ്ഞിരിക്കണം - ഉദാഹരണത്തിന്, HEAD. PHP-യിൽ ഈ രീതി പ്രോസസ്സ് ചെയ്യുമ്പോൾ ഒരു സുരക്ഷാ ദ്വാരം ഉണ്ടാകാം.

ഇൻ്റർപ്രെറ്റർ ഉറവിടങ്ങളിൽ ഒന്ന് നോക്കാം: ./main/SAPI.c, ലൈൻ 315:

എങ്കിൽ (SG(request_info).request_method &&
!strcmp(SG(request_info).request_method, "HEAD"))
{
SG(request_info).headers_only = 1;
...

ഏതെങ്കിലും ഡാറ്റ വരുമ്പോൾ, php_ub_body_write ഫംഗ്‌ഷൻ എക്‌സിക്യൂട്ട് ചെയ്യപ്പെടും. അടുത്തതായി, main/output.c, ലൈൻ 699 നോക്കുക:

എങ്കിൽ (SG(request_info).headers_only) (
എങ്കിൽ(SG(headers_sent))
{
തിരികെ 0;
}
php_header(TSRMLS_C);
zend_bailout();
}

സ്‌ക്രീനിൽ ആദ്യമായി പ്രിൻ്റ് ചെയ്യപ്പെടുന്നതും HEAD രീതി ഉപയോഗിക്കുമ്പോൾ, zend_bailout ഫംഗ്‌ഷൻ സ്‌ക്രിപ്‌റ്റിനെ തകർക്കുന്നതും ഇവിടെ കാണാം.

ചൂഷണം ചെയ്യുക

ഇനി നമുക്ക് HEAD രീതി ഉപയോഗിച്ച് ഈ സ്ക്രിപ്റ്റ് ആക്സസ് ചെയ്യാം:

നിങ്ങൾ പ്രതീക്ഷിക്കുന്നതുപോലെ, ഞങ്ങളുടെ അതിഥി പുസ്തകം "echo $data;" എന്ന വരിയിൽ അതിൻ്റെ നിർവ്വഹണം നിർത്തും, അതിനാൽ book.txt ഫയൽ പൂജ്യത്തിലേക്ക് പുനഃസജ്ജമാക്കപ്പെടും.
ഈ ഉദാഹരണം പ്രകൃതിയിൽ തികച്ചും വിനാശകരമാണ്. രണ്ടാമത്തെ ഉദാഹരണത്തിൽ, പ്രാകൃത അഡ്മിൻ പാനലിലെ അംഗീകാരം നമുക്ക് മറികടക്കാം:

ഈ സ്ക്രിപ്റ്റിൽ, സാധാരണ രീതികൾ ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യുമ്പോൾ, സെഷനിൽ ഒരു അഡ്മിനിസ്ട്രേറ്റീവ് വേരിയബിൾ സജ്ജീകരിച്ചിരിക്കുന്നു. തുടർന്ന്, ഉപയോക്താവ് തെറ്റായ പാസ്‌വേഡ് നൽകിയാൽ, ഈ വേരിയബിൾ പുനഃസജ്ജമാക്കപ്പെടും, ഉപയോക്താവ് അഡ്മിൻ ആകില്ല.

HEAD വഴി ഞങ്ങൾ അഡ്മിൻ പാനൽ ആക്‌സസ് ചെയ്യുകയാണെങ്കിൽ, അതിൻ്റെ നിർവ്വഹണം "എക്കോ" ഉള്ള കോഡിൻ്റെ ഭാഗത്ത് തടസ്സപ്പെടും, അതിനാൽ അഡ്മിനിസ്ട്രേറ്റീവ് വേരിയബിൾ പുനഃസജ്ജമാക്കപ്പെടില്ല, കൂടാതെ നമുക്ക് ആപ്ലിക്കേഷൻ്റെ അടച്ച ഭാഗത്ത് സുരക്ഷിതമായി ചുറ്റിക്കറങ്ങാം. ഇവിടെ ഓർക്കേണ്ട കാര്യം, മിക്ക വെബ് സെർവറുകളിലും ഔട്ട്‌പുട്ട് ബഫറിംഗ് മൂല്യം 4096 ബൈറ്റുകളായി സജ്ജീകരിച്ചിരിക്കുന്നു എന്നതാണ്, അതിനാൽ ഒരു പ്രവർത്തന ഉദാഹരണത്തിൽ നമുക്ക് "ഒരു നീണ്ട സ്ട്രിംഗിൽ ഏകദേശം 4090 പ്രതീകങ്ങൾ അടങ്ങിയിരിക്കുന്നു" എന്ന സ്ട്രിംഗ് ആവശ്യമായി വന്നേക്കാം.

ചൂഷണം ചെയ്യുക
  • PHP

    ഇവിടെ $check അറേയിൽ ഞങ്ങളുടെ POST ഡാറ്റ അടങ്ങിയിരിക്കുന്നു, കൂടാതെ $locked വേരിയബിൾ എന്നത് str_rot13() ഫംഗ്‌ഷൻ ഉപയോഗിച്ച് അവ്യക്തമാക്കിയ ഒരു സീരിയലൈസ്ഡ് സ്ട്രിംഗ് ആണ്, അത് പൂർണ്ണമായും ഞങ്ങളുടെ നിയന്ത്രണത്തിലാണ്.

    ഈ ഘട്ടത്തിൽ ] എന്നതിലെ അനുബന്ധ ലേഖനങ്ങൾ വായിക്കാത്തവർക്കായി ഒരു ചെറിയ വ്യതിചലനം നടത്തുന്നത് മൂല്യവത്താണ്, കൂടാതെ PHP-യുടെ മാന്ത്രിക രീതികളിൽ സ്വയം പ്രത്യക്ഷപ്പെടുന്ന ബഗിനെക്കുറിച്ച് സംക്ഷിപ്തമായി സംസാരിക്കുക. അതിനാൽ, PHP പതിപ്പ് 5 ൽ, OOP പ്രോഗ്രാമിംഗിൻ്റെ അടിസ്ഥാന ആശയം പ്രത്യക്ഷപ്പെട്ടു: കൺസ്ട്രക്റ്ററും ഡിസ്ട്രക്റ്ററും. ഒരു കൺസ്ട്രക്റ്റർ "__കൺസ്ട്രക്റ്റ്" രീതി ഉപയോഗിച്ചും ഒരു ഡിസ്ട്രക്റ്റർ "__ഡിസ്ട്രക്റ്റ്" രീതി ഉപയോഗിച്ചും നടപ്പിലാക്കുന്നു. അതിൻ്റെ ജോലി പൂർത്തിയാകുമ്പോൾ, അൺസീരിയലൈസ് () ഫംഗ്ഷനിലൂടെ വിളിക്കുമ്പോൾ, ഓരോ ഒബ്ജക്റ്റും കോഡിൽ എഴുതിയിട്ടുണ്ടെങ്കിൽ, അതിൻ്റേതായ __ ഡിസ്ട്രക്റ്റ് രീതി നടപ്പിലാക്കുന്നു.

    ഇനി നമുക്ക് നമ്മുടെ ചട്ടക്കൂടിലേക്ക് തിരികെ പോകാം, ./libs/configure.php എന്ന ഫയലിൽ നിന്ന് ആപ്പ് ക്ലാസ് ഡിസ്ട്രക്റ്റർ നോക്കാം:

    ഫംഗ്ഷൻ __destruct()
    {
    എങ്കിൽ ($this->__cache)
    {
    $ കോർ = ആപ്പ്:: കോർ ("കേക്ക്");
    സജ്ജീകരിക്കാത്തത് ($ ഇത്->__പാതകൾ);
    കാഷെ::write("dir_map", array_fi lter($this->__paths),
    "കേക്ക്_കോർ");
    കാഷെ::write("fi le_map", array_fi lter($this->__map),
    "കേക്ക്_കോർ");
    കാഷെ::write("object_map", $this->__objects,
    "കേക്ക്_കോർ");
    }
    }

    മുകളിലെ കോഡിൽ നിന്ന്, കാഷെ ഒബ്‌ജക്റ്റിലേക്ക് അനിയന്ത്രിതമായ മൂല്യങ്ങൾ എഴുതുന്നതിലൂടെ ഈ രീതി വിട്ടുവീഴ്ച ചെയ്യാമെന്ന് നിങ്ങൾക്ക് കാണാൻ കഴിയും. ക്രാക്കിനുള്ള ഏറ്റവും രസകരമായ കീ 'file_map' ആണ്. ഇത് ക്ലാസുകളും അനുബന്ധ PHP ഫയലുകളും തമ്മിലുള്ള കണക്ഷനുകൾ നിയന്ത്രിക്കുന്നു, കൂടാതെ സ്ക്രിപ്റ്റ് എക്സിക്യൂഷൻ സമയത്ത് അധിക ക്ലാസുകൾ ലോഡ് ചെയ്യാനും ഇത് ഉപയോഗിക്കുന്നു.

    ക്ലാസുകൾ ലോഡുചെയ്യുന്നതിനുള്ള യഥാർത്ഥ കോഡ് കുറച്ചുകൂടി സങ്കീർണ്ണമാണ്, എന്നാൽ ആപ്പ് ക്ലാസിനുള്ളിലെ __ലോഡ് രീതിയിൽ നിന്നുള്ള ഇനിപ്പറയുന്ന കോഡിലേക്ക് എല്ലാം തിളച്ചുമറിയുന്നു:

    ബിങ്കോ! $file വേരിയബിളിന് പകരമായി, നമുക്ക് നമ്മുടെ സ്വന്തം PHP കോഡ് ഉൾപ്പെടുത്താം! മാത്രമല്ല, ഇതൊരു യഥാർത്ഥ റിമോട്ട് ഫയൽ ഉൾപ്പെടുത്തൽ ബഗ് ആയിരിക്കും - അതിനാൽ, സെർവറിലേക്ക് പ്രാദേശിക ഫയലുകൾ അപ്‌ലോഡ് ചെയ്യുന്നതിന് ഞങ്ങൾക്ക് അധിക തന്ത്രങ്ങളൊന്നും ആവശ്യമില്ല. എന്നിരുന്നാലും, കണ്ടെത്തിയ ദുർബലതയുടെ രചയിതാവ് ഈ ദ്വാരം പ്രയോജനപ്പെടുത്തുന്നതിന് ഒരു LFI ഓപ്ഷൻ വാഗ്ദാനം ചെയ്യുന്നു, കാരണം CakePHP ഒരു ഫയൽ അധിഷ്ഠിത ലോക്കൽ കാഷെ ഉപയോഗിക്കുന്നു, അത് ആക്രമണകാരിക്ക് അറിയാവുന്ന ഒരു ഡയറക്ടറിയിൽ സീരിയലൈസ് ചെയ്ത രൂപത്തിൽ സ്ഥിതിചെയ്യുന്നു.

    ചൂഷണം ചെയ്യുക

    വിഷമുള്ള ഒരു സീരിയലൈസ്ഡ് സ്ട്രിംഗ് സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു ചെറിയ PoC എന്ന നിലയിൽ, ഫെലിക്സ് ഇനിപ്പറയുന്ന കോഡ് വാഗ്ദാനം ചെയ്യുന്നു:

    തീർച്ചയായും, നിങ്ങൾ ആദ്യം CakePHP-യിൽ നിന്ന് ആവശ്യമായ ക്ലാസുകൾ ഉൾപ്പെടുത്തണം. നിങ്ങൾക്ക് malloc.im/burnedcake.py എന്നതിൽ കണ്ടെത്താനാകുന്ന പൂർണ്ണമായി പ്രവർത്തനക്ഷമമായ ഒരു പൈത്തൺ ചൂഷണവുമുണ്ട്.

    സുരക്ഷാ ടോക്കണുകളുള്ള POST ഫോമുകൾ ഉപയോഗിച്ച് CakePHP-യിൽ നിർമ്മിച്ച എല്ലാ ആപ്ലിക്കേഷനുകളിലും ഈ ചൂഷണം പ്രവർത്തിക്കണം, കൂടാതെ കാഷെ ഫയലുകളുടെ സ്റ്റാൻഡേർഡ് ലൊക്കേഷൻ മാറ്റിയിട്ടില്ല. സ്ഥിരസ്ഥിതിയായി, ചൂഷണം ഡാറ്റാബേസ് കോൺഫിഗറേഷൻ പ്രദർശിപ്പിക്കുന്നു; ബിൽറ്റ്-ഇൻ PHP പേലോഡ് മാറ്റുന്നതിലൂടെ മറ്റ് ഉപയോഗപ്രദമായ സവിശേഷതകൾ എളുപ്പത്തിൽ ചേർക്കാനാകും.

    ലക്ഷ്യങ്ങൾ
    • കേക്ക്PHP getState("fi lter_order_dir");
      $fi lter_order = JFilterInput::clean($fi lter_order, "cmd");
      $fi lter_order_dir =
      JFilterInput::clean($fi lter_order_dir, "word");
      // നമുക്ക് എല്ലാവരുടെയും ഒരു ലിസ്റ്റ് ലഭിക്കേണ്ടതുണ്ട്
      // നൽകിയിരിക്കുന്ന വിഭാഗത്തിലെ വെബ്‌ലിങ്കുകൾ
      $query = "തിരഞ്ഞെടുക്കുക *" .
      "#__വെബ്ലിങ്കുകളിൽ നിന്ന്" .
      "WHERE catid = ". (int) $this->_id.
      "ഒപ്പം പ്രസിദ്ധീകരിച്ചത് = 1" .
      "ആൻഡ് ആർക്കൈവ് ചെയ്തത് = 0".
      "ഓർഡർ പ്രകാരം". $fi lter_order "".
      $fi lter_order_dir .", ഓർഡർ ചെയ്യുന്നു";
      തിരികെ $query;
      }

      $filter_order, $filter_order_dir വേരിയബിളുകൾ SQL പ്രസ്താവനകൾ കർശനമായി പാലിക്കുന്നുണ്ടോയെന്ന് പരിശോധിച്ചിട്ടില്ലെന്ന് ഇവിടെ നിങ്ങൾക്ക് കാണാൻ കഴിയും; JFilterInput ക്ലാസ്സിൽ നിന്നുള്ള സ്റ്റാൻഡേർഡ് ക്ലീൻ രീതി ഉപയോഗിച്ചാണ് പരിശോധന നടത്തുന്നത്: