Tunatumia PHP kwa madhumuni yaliyokusudiwa. Muundo wa kiolezo cha WordPress - kila mtu anapaswa kujua

Salaam wote! Leo tutaangalia muundo wa template yoyote ya tovuti ya WordPress. Kutoka kwa ambayo faili za msingi na vipengele ni kujengwa. Maarifa haya yatakupa ujasiri katika kubadilisha na kuhariri violezo vya watu wengine. Na baadaye, ikiwa kuna maarifa ya msingi HTML, CSS, na PHP, unda yako mwenyewe mada mwenyewe. Lakini kwa sasa hatutaangalia mbali, tuanze na mambo ya msingi.

Faili kuu za kiolezo chochote. Kusudi lao.

Na kwa hivyo, kiolezo chochote kinapaswa kuwa na faili 10 za kimsingi. Basi tuwaelewe.

Mfano Miundo ya WordPress kiolezo

mtindo.css- faili ya mtindo wa kiolezo. Mandhari yoyote yanapaswa kuwa na faili hii, kwa kuwa inawajibika kwa tamko lake na inaweza pia kuhifadhi Taarifa za ziada: jina la mwandishi wa template, toleo la template, ukurasa wa nyumbani mwandishi, nk. Na, bila shaka, madhumuni ya moja kwa moja ni mitindo yote ya CSS.

index.php- faili inawajibika kwa kuonyesha kuu Kurasa za WordPress kiolezo. Unapoweka mipangilio yako, kumbuka hilo kila wakati ukurasa wa nyumbani inaweza kuwa tuli au yenye nguvu.

single.php- faili yenye jukumu la kutoa kila chapisho la mada yako. Mfano ni makala hii unayosoma.

ukurasa.php- faili inawajibika kwa kutengeneza kurasa tuli. Kawaida hizi ni kurasa: mawasiliano, kuhusu mwandishi, kuhusu rasilimali, nk.

kichwa.php- huunda kichwa cha tovuti, na huhifadhi meta tagi zote muhimu kwa ukuzaji.

footer.php- faili inawajibika kwa kuonyesha kijachini cha tovuti.

upau wa kando.php- huunda onyesho la utepe au, kwa Kirusi, safu wima ya kando ya blogi au tovuti.

kazi.php- faili inayohusika na utendaji wa ziada kiolezo. Kwa mfano: matokeo ya watoa maoni wa hivi punde kwenye blogu yangu yanatolewa katika faili hii.

maoni.php- faili inawajibika kwa kuonyesha maoni kwa kiolezo.

404.php- inawajibika kwa kuonyesha ukurasa na hitilafu 404.

search.php- faili inayohusika na kuonyesha ukurasa wa utafutaji.

Faili za hiari. Lakini unahitaji kujua juu ya uwepo wao.

kategoria.php— faili inawajibika kwa kuonyesha matangazo katika kategoria (ikiwa hakuna faili, basi uundaji unafanywa kwa kutumia index.php faili)

tag.php- faili inawajibika kwa kuonyesha matangazo kwenye ukurasa wa vitambulisho (ikiwa hakuna faili, basi uundaji unafanywa kwa kutumia index.php faili)

taksonomia.php- faili ina jukumu la kuonyesha matangazo kwenye kurasa za jamii (ikiwa hakuna faili, basi uundaji unafanywa kwa kutumia index.php faili)

mwandishi.php- faili inawajibika kwa kuonyesha matangazo ya makala na mwandishi maalum (ikiwa hakuna faili, basi uundaji unafanywa kwa kutumia index.php faili)

attachment.php- inawajibika kwa kutoa faili iliyoambatishwa.

searchform.php- ni wajibu wa kuunda fomu ya utafutaji.

Ikiwa kiolezo chako kina faili kutoka kwenye orodha ya hiari, basi unapaswa kujua kwamba daima zina kipaumbele cha juu kuliko faili ya index.php. Hii inaweza kuelezewa na ukweli kwamba index.php ni kesi ya jumla, na hebu sema tag.php tayari ni kesi fulani. Hizi ni maalum zaidi, kwa hivyo, zinahitaji kuzingatiwa.

Ni nini kinachohifadhiwa kwenye folda?

Folda kawaida hutumiwa kuhifadhi aina fulani mafaili. Kwa mfano: folda (picha, picha, img, nk) huhifadhi faili za picha zinazohusiana na mada hii. Folda ya JS huhifadhi faili za hati. Folda ya inc huhifadhi php faili, ambazo zimejumuishwa (zimejumuishwa) ndani faili zilizopo Mada.

Kunaweza kuwa na idadi yoyote ya folda kama hizo, na zinaweza kuwa na majina tofauti. Kiini chao ni kuondoa fujo kwenye kiolezo na kuleta kila kitu kwa aina fulani ya uongozi.

Picha ya skrini.png - huyu ni mnyama wa aina gani?

Kwa kawaida, faili hii ina picha ya skrini ya kiolezo ili katika paneli ya msimamizi, unapochagua mandhari ya tovuti au blogu, unaweza kuiona kama kijipicha. Ukubwa wa faili hii unapaswa kuwa 880x660px.

Uwakilishi unaoonekana wa muundo wa kiolezo

Mchoro wordpress picha kiolezo

Kama unavyoona, muundo kwenye picha unalingana na muundo wa blogi yangu. Licha ya ukweli kwamba templates kutoka kwa waandishi tofauti zinaonekana tofauti, zote zinatokana na faili zilizo hapo juu.

upd: Tahadhari, maandishi yana kejeli na kuvunja msimbo

Lugha PHP programu ilianza mwaka 1995 na ni zao la enzi ya kuzaliwa mtandao wa kisasa viwango kama vile http (toleo la 1.0 - 1996), html (toleo la 2.0 - 1995), javascript (1995), url (1990 - 1994). Hapo awali, kifupi php kilisimama kwa Zana za Ukurasa wa Kibinafsi, kisha kubadilishwa kuwa Hypertext Preprocessor au "hypertext preprocessor". Kuhusu kwa kutumia PHP kama mchakataji na itajadiliwa katika aya chache zinazofuata.

Mkalimani wa PHP hukuruhusu kuingiza lebo maalum kwenye maandishi yoyote, ambayo unaweza kuingiza kwenye ukurasa maudhui yenye nguvu, ambayo ni rahisi sana kutumia ndani hati za html. Matokeo yaliyopatikana yanatumwa mara moja kwa kifaa cha kawaida pato, inayojulikana kama stdout (tazama kwa maelezo zaidi). Inawezekana kubaki pato hadi itakapohitajika kupitia kitendakazi ob_start, lakini kwa yetu ya kwanza kurasa za html Hutahitaji hii. Kiwango cha hivi majuzi zaidi cha html, nambari 5, kilianzisha lebo kadhaa mpya ili kurahisisha uwekaji alama na kufanya wavuti kusomeka zaidi na kisemantiki (chochote hicho). Kwa hivyo, hebu tuchukue fursa ya uwezo kamili wa HTML5 mara moja na tuandike kiolezo cha ukurasa na viingilio kwa kutumia kichakataji kinachohusika.

Hebu tuhifadhi ukurasa huu kwenye faili ya index.html. Utendaji wa blogu katika toleo lake la kwanza utajumuisha kuhifadhi machapisho ndani fomu ya html kurasa ndani ya saraka iliyofafanuliwa awali (kwa mfano kurasa/) na menyu inayokuruhusu kwenda moja kwa moja kwenye uchapishaji unaotaka.

Mfano wa chapisho litakaloonyeshwa kwenye mpasho wa blogu.

Hebu tuongeze kurasa/ saraka kwenye mzizi wa mradi na tuhifadhi makala yetu chini ya jina la kiholela, kwa mfano 2018-trends.html.

Sasa tunahitaji seva ya wavuti ili kuchakata ujumbe unaoingia maombi ya http kutoka kwa watumiaji, na seva ya programu kwa mantiki ya biashara. Ili sio kuunda vyombo visivyo vya lazima, tutaandika programu ndogo katika lugha ya programu ya Go, ambayo itafanya kama seva ya wavuti na ina msimbo wa blogi. Kuhamisha maombi ya mtumiaji kutoka kwa programu mwenyeji hadi kwa kichakataji awali, tutatumia mkondo wa kawaida input (stdin), kusawazisha data tutatumia umbizo maarufu kwa utayarishaji wa data - json.

Hati ya kuchakata data ya ingizo:

Msimbo wa blogi:

kuu.kwenda

uagizaji mkuu wa kifurushi ("encoding/json" "io/ioutil" "net/http" "os/exec" "strings" "github.com/labstack/echo") func main() ( e:= echo.New() e.GET("/", index) e.GET("/pages/:page", index) e.Start(":8000") ) func index(c echo.Context) error ( outData:= struct ( Menyu) kamba `json:"menu"` Mfuatano wa kurasa `json:"kurasa"` )() outData.Menu = tengeneza(kamba, 0) outData.Pages = tengeneza(kamba, 0) ukurasa:= c.Param("ukurasa" ) faili, _ := ioutil.ReadDir("kurasa") kwa _, faili:= faili mbalimbali ( ikiwa !file.IsDir() ( outData.Menu = append(outData.Menu, file.Name()) ) ikiwa ukurasa != "" && page == file.Name() ( fbody, _ := ioutil.ReadFile("kurasa" + "/" + file.Name()) outData.Pages = append(outData.Pages, string(fbody) )) ) pengine ikiwa ukurasa == "" ( fbody, _ := ioutil.ReadFile("kurasa" + "/" + file.Name()) outData.Pages = append(outData.Pages, string(fbody)) ) ) inayotolewa:= renderContent(outData) return c.HTMBLlob(http.StatusOK, rendered) ) func renderContent(input interface()) byte ( jsonInput, _ := json.Marshal(input) tmplEngine:= exec.Command("php ", "-f", "index.php") tmplEngine.Stdin = strings.NewReader(string(jsonInput)) inayotolewa, _ := tmplEngine.Output() kurudi kumetolewa)


Sasa tunazindua programu kupitia go run na kufanya ombi kwa ukurasa kupitia kivinjari chochote, kwa mfano kwa njia hii:

Viungo2 http://localhost:8000

Matokeo yanawasilishwa kwenye KDPV.

Msomaji mdadisi anaweza kugundua kuwa tunapoteza sana utendakazi kwa kuzindua mchakato wa PHP kwa kila ombi. Hatua hii inaweza kuboreshwa kwa urahisi kwa kutumia utaratibu

Katika nakala hii, nilizungumza juu ya jinsi ya kupata seti ya data kutoka kwa meza ya hifadhidata inayolingana na ukurasa uliochaguliwa na mtumiaji. Katika makala hii tutaangalia Pagination pato katika PHP. Pagination ni orodha ya kurasa zenyewe. Kuna chaguo mbalimbali kwenye mtandao, lakini wote wanakabiliwa na jambo moja - kiasi kikubwa cha kanuni ili kuunda idadi isiyo na kipimo ya chaguo. Lakini unahitaji kweli kutokuwa na mwisho? Unahitaji tu 1 chaguo, ambayo itakuwa kwenye tovuti. Katika makala hii tuko pamoja nawe hebu tutengeneze pagination tata kiasi, lakini hakutakuwa na msimbo mwingi hata kidogo.

Kwa tengeneza Pagination katika PHP, tunahitaji kuwa na vigezo kadhaa kwenye pembejeo:

  • hesabu_kurasa- idadi ya kurasa.
  • hai- ukurasa unaotumika sasa.
  • count_show_kurasa- idadi ya kurasa zilizoonyeshwa. Kwa mfano, ikiwa kuna 1000 kurasa, kisha kuzionyesha zote ni shida sana. Kwa hiyo, tu kiasi maalum kitaonyeshwa katika parameter hii.
  • url- anwani ya ukurasa ambayo na Pagination imeundwa.
  • ukurasa_wa_url- anwani ya ukurasa na parameter ukurasa usio na thamani mwishoni. Kwa mfano, " /abc.php?func=create&page=".

Sasa tunaweza kuunda pagination, hivi ndivyo inavyoonekana PHP:

/* Vigezo vya kuingiza */
$count_pages = 50;
$ kazi = 15;
$count_show_pages = 10;
$ url = "/index.php";
$url_page = "/index.php?page=";
ikiwa ($count_pages > 1) ( // Yote hii ikiwa tu idadi ya kurasa ni kubwa kuliko 1
/* Inayofuata ni hesabu ya ukurasa wa kwanza kuonyeshwa na wa mwisho (ili ukurasa wa sasa uwe mahali fulani katikati, ikiwezekana, na ili jumla ya kurasa zinazoonyeshwa iwe sawa na count_show_pages, au chini ikiwa nambari ya kurasa haitoshi) */
$ kushoto = $ kazi - 1;
$kulia = $count_pages - $active;
ikiwa ($ left< floor($count_show_pages / 2)) $start = 1;
kingine $start = $active - floor($count_show_pages / 2);
$end = $anza + $count_show_pages - 1;
ikiwa ($end > $count_pages) (
$start -= ($end - $count_pages);
$ end = $count_pages;
ikiwa ($start< 1) $start = 1;
}
?>


Nitasema mara moja kwamba ingawa nambari ni ndogo, ni ngumu sana kwa Kompyuta. Miaka 3 iliyopita Nilitumia muda mwingi kufanya kitu kama hiki kisha nambari ikatokea Mara 2 zaidi.

Na kisha unaweza kufanya hivi Kuweka kurasa kupitia CSS kupamba kama unavyotaka. Unaweza pia kubadilisha mpangilio ikiwa inataka (kwa mfano, badala ya mabano ya pembe " Ukurasa uliotangulia"na zinazofanana, weka picha nzuri), jambo kuu sio kugusa Nambari ya PHP.

Hii ni rahisi sana Pagination kutekelezwa kwenye tovuti hii, na pia kwenye baadhi ya tovuti zangu nyingine.

Katika Somo la 1 na la 2, tayari umejifunza machache kuhusu PHP na kusanidi (au kufikia) seva. Sasa tuko tayari kuunda ukurasa wetu wa kwanza wa PHP. Itakuwa rahisi na rahisi, lakini baada ya somo hili utakuwa tayari kujua mengi zaidi kuhusu PHP.

Kawaida faili ya PHP ni faili ya maandishi na kiendelezi .php, inayojumuisha:

  • Maandishi
  • Lebo za HTML
  • Nakala za PHP

Tayari unafahamu maandishi na lebo za HTML. Sasa hebu tuzingatie hati za PHP.

Nakala za PHP

Kundi la Hati za PHP limetoa nyaraka za kina. Kuna viungo vingi vya hati hii katika mafunzo haya yote. Lengo ni kukufanya uwe na tabia ya kutafuta majibu ya maswali yako. PHP ni kubwa sana kwamba haiwezi kufunikwa katika mafunzo haya. Lakini PHP ni rahisi sana! Aidha, lugha ya PHP mara nyingi ni sawa na Kiingereza cha kawaida.

Wacha tuanze kuunda ukurasa wako wa kwanza wa PHP.

Mfano: Hujambo Ulimwengu!

Wacha tuanze kuunda hati ya kawaida ya HTML, lakini wacha tuite faili ukurasa.php na kuiweka kwenye saraka ya mizizi ya tovuti. Ikiwa unatumia XAMPP (angalia Somo la 2), njia ya faili kwenye kompyuta yako (ambayo sasa ni seva) itakuwa "c:\xampp\htdocs\page.php".

Nambari ya HTML inapaswa kuonekana kama hii:

Ukurasa wangu wa kwanza wa PHP

Kama labda unakumbuka kutoka kwa somo la kwanza, PHP inatoa amri kwa seva. Kwa hivyo, wacha tuandike amri kwa seva.

Kwanza tunapaswa kuwaambia seva ambapo nambari ya PHP iko huanza Na mwisho. Katika vitambulisho vya PHP Na ?> hutumika kuashiria mwanzo na mwisho wa vizuizi vya nambari ya PHP ambayo seva lazima itekeleze (kwenye seva nyingi inatosha kutumia. kama lebo ya kuanza, lakini itakuwa sahihi zaidi unapotumia PHP kwa mara ya kwanza.)

Hebu sasa tujaribu kuongeza kizuizi hiki cha msimbo kwenye msimbo wako wa HTML:

Ukurasa wangu wa kwanza wa PHP Salamu, Dunia!"; ?>

Ukitazama hati hii ya PHP kwenye kivinjari, itaonekana kitu kama hiki:

Lakini itakuwa ya kuvutia kuona msimbo wa HTML kwenye kivinjari (kuchagua "chanzo cha kutazama"):

Misimbo ya PHP imetoweka! Kutoka kwa somo la kwanza, unakumbuka kuwa seva pekee inaweza kuona nambari za PHP - mteja (mpango wa kivinjari) huona matokeo tu!

Hebu tuone kitakachotokea. Tunaomba seva kuandika

Salamu, Dunia!

. Kwa maneno ya kiufundi zaidi, tunatumia kazi ya kamba ya echo kuandika kamba maalum kwa mteja, na semicolons zinaonyesha mwisho wa amri. Lakini usijali! Katika somo hili tutajaribu kutumia istilahi za kiufundi kwa uchache.

Mfano wetu wa kwanza ni wazi sio wa kuvutia sana. Lakini usikimbilie! Sasa mambo yatapendeza zaidi. Hebu tuangalie mfano mwingine.

Mfano: Sasa!

Wacha tulazimishe seva kuandika kitu kingine. Tunaweza, kwa mfano, kuiuliza itoe tarehe na wakati wa sasa:

Ukurasa wangu wa kwanza wa PHP

Katika kivinjari tutaona:

Msimbo wa HTML husika:

Inapendeza zaidi, sivyo?

Seva huonyesha tarehe na saa wakati wa kutoa ukurasa wa PHP. Tafadhali kumbuka kuwa unapoonyesha upya ukurasa kwenye kivinjari chako, wakati mpya utaonyeshwa. Seva huonyesha tarehe na saa ya sasa wakati wowote ukurasa unapotumwa kwa mteja.

Kumbuka pia kwamba HTML ina tarehe na wakati pekee, lakini si misimbo ya PHP. Kwa hiyo, mfano huu haujitegemea ambayo kivinjari kinatumiwa. Kwa kweli, utendaji wote unafanywa seva teknolojia na daima inafanya kazi katika vivinjari vyote!

/* 09.07.2008 */

Pato la ukurasa (PHP na MySQL)

Mara nyingi kwenye tovuti kuna haja ya kuonyesha kiasi kikubwa cha habari ya aina moja, na, kwa urahisi wa mtazamo, inapaswa kugawanywa katika sehemu, i.e. tekeleza utazamaji wa ukurasa kwa ukurasa wa habari hii. Suluhisho hili linatumiwa na injini za utafutaji wakati wa kuonyesha matokeo ya utafutaji, vikao, bodi za ujumbe, nk. Nakala hii inaelezea jinsi ya kutekeleza pato la ukurasa kwa kutumia MySQL na PHP.

Kuanza na, naona kwamba makala haifundishi jinsi ya kufanya kazi na database na PHP, lakini hutoa maelezo ya utekelezaji na hutoa tayari kutumia moja (urambazaji wa ukurasa).

Hebu tuanze! Wacha tuseme kuna hifadhidata (MySQL), kwa mfano, na matangazo. Tunahitaji kutekeleza maonyesho yao kwenye tovuti, katika sehemu za vipande 20 kwa kila ukurasa. Ili kusonga kati ya sehemu, chini ya kila ukurasa unahitaji kuunda viungo na nambari za "sehemu" (lebo za ukurasa):

Nenda...

Inaleta data katika vipande

Ili kuchagua matangazo YOTE kutoka kwa hifadhidata, unahitaji swali kama vile:

CHAGUA *KUTOKA jedwali1

Bila shaka, hii ni toleo lililorahisishwa, na katika kazi halisi, mara nyingi, ombi lina hali mbalimbali (WAPI, ORDER BY ... taarifa).

Ili swala hili lifanye uteuzi katika sehemu, unahitaji kuongeza opereta kwake KIKOMO:

Sintaksia ya kauli LIMIT: hesabu ya safumlalo LIMIT

Kigezo cha hiari kukabiliana inakuambia ni safu ngapi tangu mwanzo wa sampuli unahitaji kuruka, na hesabu_mlalo inaonyesha ngapi safu zinahitajika kuchaguliwa, i.e. LIMIT 0, 20 (au LIMIT 20 tu ikiacha sifuri kukabiliana) huchagua safu 20 za kwanza (safu 0 hadi 19), na LIMIT 40, 20 inabainisha kuruka 40 (safu 0 hadi 39) na kuchagua 20 zinazofuata (yaani safu ya 40 hadi 59 itachaguliwa).

Tafadhali kumbuka kuwa safu katika sampuli zimehesabiwa kutoka sifuri, sio kutoka kwa moja.

Kwa hivyo maswali ya mfano wetu wa tangazo yatakuwa:

#swali la kuchagua ukurasa wa 1: CHAGUA * KUTOKA jedwali1 LIMIT 0, 20 #swali la kuchagua ukurasa wa 2: CHAGUA * KUTOKA jedwali1 LIMIT 20, 20 #swali la kuchagua ukurasa wa 3: CHAGUA * KUTOKA jedwali1 LIMIT 40, 20

na kadhalika. kukabiliana kuongezeka kwa 20 kwa kila ukurasa unaofuata, na hesabu_mlalo daima ni sawa na 20.

Ikumbukwe pia kuwa opereta LIMIT katika swala huja kwa mpangilio baada ya WHERE , GROUP BY , HAVING , ORDER BY , lakini ikiwa wewe ni mpya kwa MySQL, unaweza kusema kwamba inakuja mwisho wa safu ya hoja (ikifuatiwa na waendeshaji ambao hutumiwa mara chache sana) .

Sehemu ya pili tunayohitaji kushughulika nayo ni mstari ulio na lebo za ukurasa...

Njia za mkato za ukurasa

Kwa mfano, kwa sampuli ya matangazo ishirini ya tatu, lebo inaweza kuonekana kama hii:

ukurasa namba 3

Unapobofya kiungo hiki, hati ya obyavleniya.php inazinduliwa, ambayo inaweza kufikia parameta ya page_number, ikionyesha kuwa matangazo 3 ishirini yanaombwa - ukurasa wa 3. Hati huruka matangazo 40 ya kwanza, na kuchagua 20 yanayofuata.

Ili kuonyesha safu mlalo hii ya lebo, unahitaji kujua jumla ya idadi ya kurasa (ili kujua ni lebo ngapi za "kuchora"). Tunaweza kuipata kwa kugawanya jumla ya idadi ya matangazo kwa idadi ya matangazo kwenye ukurasa, na kuzungusha matokeo hadi nambari kamili ya juu. Hiyo ni, ikiwa katika mfano wetu, hebu sema, kuna matangazo 107 tu, na tunaonyesha 20 kati yao kwenye kila ukurasa, basi idadi ya kurasa itakuwa: 107 / 20 = 5.35, i.e. Kurasa 5 kamili (matangazo 20 kila moja) + moja haijakamilika (matangazo 7), kwa jumla, iliyozungushwa, tunapata kurasa 6 (kwa hivyo, kutakuwa na lebo 6).

Ili kuhesabu jumla ya idadi ya matangazo, kuna njia mbili. Njia ya kwanza ni kutekeleza swali tofauti la muhtasari karibu sawa na swali la kuchagua data, bila tu kikomo cha opereta LIMIT na shughuli zisizo za lazima za kupanga (ORDER BY), kwa mfano:

#swali la kuchagua matangazo kurasa 3 CHAGUA * KUTOKA jedwali1 WAPI category_id="89" NA ... ORDER BY publish_date DESC LIMIT 40, 20 #swali la kuhesabu matangazo YOTE kwenye hifadhidata CHAGUA COUNT(*) KUTOKA jedwali1 WAPI category_id="89" NA ...

Hoja ya kwanza huchagua matangazo, na ya pili hukokotoa jumla ya nambari zao kwa kutumia chaguo la kukokotoa COUNT. Kwa mazoezi, maswali ya kurejesha data yanaweza kuwa magumu na mazito, hivyo swala nzito ya ziada ya kuhesabu sio operesheni "ya lazima" zaidi. Pia, njia hii sio ya kifahari kama ya pili ...

MySQL 4.0.0 ilianzisha mambo makubwa kama kazi ILIYOPATIKANA_ROWS na kuhusiana nayo SQL_CALC_FOUND_ROWS- chaguo la kauli SELECT.

Wacha tuchunguze chaguo la pili la kuhesabu jumla ya safu:

CHAGUA SQL_CALC_FOUND_ROWS* KUTOKA jedwali1 WAPI category_id="89" NA ... AGIZA KWA publish_tarehe DESC LIMIT 40, 20 CHAGUA FOUND_ROWS()

Tena, ombi la kwanza hufanya uteuzi wa matangazo, na ya pili inapata idadi ya jumla, lakini ...

Hoja ya uteuzi wa tangazo katika kesi hii inatofautiana na chaguo kutoka kwa chaguo la kwanza kwa uwepo wa chaguo la SQL_CALC_FOUND_ROWS. Chaguo hili linaamuru MySQL, pamoja na uteuzi wa data, kuhesabu pia safu mlalo zote ambazo hoja itarudi bila opereta LIMIT. Wale. kwa kweli, ombi hili linajumuisha, katika fomu iliyofichwa, ombi COUNT kutoka kwa chaguo la kwanza. Katika kesi hii, kiasi kilichohesabiwa yenyewe hakirudishwa, lakini kinakumbukwa na seva. Sasa, ili kujua nambari hii, unahitaji kutekeleza ombi na kazi ya FOUND_ROWS (katika kesi hii, seva haifanyi mahesabu yoyote, inarudi tu kile kilichokumbuka hapo awali).

Chaguo la pili hakika linaonekana kifahari zaidi na linaweza pia kutoa faida kadhaa za kasi.

Kuweka yote pamoja

Sasa unajua kila kitu unachohitaji, na ninaweza kutoa algorithm inayoelezea mantiki ya script ya obyavleniya.php kwa pagination, ambayo imezinduliwa wakati mtumiaji anaingia kwenye ukurasa wa tangazo ...

  1. Awali ya yote, wakati wa kuendesha script, tunaangalia ukurasa gani mtumiaji anaomba (kwa mfano wetu, hii inaonyeshwa na parameter ya page_number);
  2. Kulingana na nambari ya ukurasa ulioombwa, tunahesabu kigezo cha kukabiliana na opereta LIMIT;
  3. tunaendesha swala la kuchagua matangazo na opereta LIMIT kukabiliana, 20 (ambapo, 20 ni idadi ya matangazo yanayoonyeshwa kwenye ukurasa katika mfano wetu);
  4. tunapata jumla ya idadi ya matangazo kwenye hifadhidata;
  5. Kulingana na nukta ya 4, tunakokotoa jumla ya idadi ya kurasa za matangazo na kuunda msururu wa lebo.

Ni hayo tu. Sasa, natumai unaweza kuandika hati yako mwenyewe, au kutumia yangu, kuelewa kiini cha jinsi inavyofanya kazi.

PHP Paging darasa kwa paging

Sasa nitatoa mfano wa jinsi urambazaji wa ukurasa unavyopangwa kwa kutumia darasa la PHP Paging.

// unganisha darasa la Paging need("paging.inc.php"); // unganisha kwenye hifadhidata$_DB = mysqli mpya($host,$user,$passwd,$db_name); // tengeneza mfano wa darasa la Paging // kama parameta tunaipitisha pointer kwa unganisho la MySQL$_PAGING = Uwekaji kurasa mpya($_DB); // fanya ombi la data la kawaida bila kuwa na wasiwasi // kuhusu upagani kupitia njia ya get_page ya kitu cha darasa la Paging$r = $_PAGING->get_page("CHAGUA *KUTOKA jedwali1"); wakati($safu = $r->fetch_assoc()) ( //chakata data iliyopokelewa kutoka kwa hifadhidata KAMA KAWAIDA na uionyeshe kwa mtumiaji } //onyesha mstari wa habari kama: "Imeonyeshwa kutoka 1 hadi 20 kati ya 107" echo $_PAGING->get_result_text()." matangazo"; //onyesha viungo vya njia ya mkato kwa kurasa zilizopita na zinazofuata echo "Kurasa: ".$_PAGING->get_prev_page_link()." ".$_PAGING->get_next_page_link()."

"; // na vile vile mstari ulio na nambari za ukurasa (njia kuu za mkato) echo $_PAGING->get_page_links(); ?>

Njia pekee ya maandishi haya yanatofautiana na hati ya kawaida bila paging ni kwamba ombi la sampuli ya data ambayo inahitaji kugawanywa katika sehemu haifanywi kupitia mysqli->query() , lakini kupitia get_page() njia inayotekelezwa kwenye Paging. darasa, pamoja na mistari mitatu ya mwisho inayoonyesha lebo na mstari wa ripoti ya uteuzi.

P.S

P.S.: Ninawasilisha maandishi haya zaidi kwa ajili ya utimilifu kuliko habari halisi inayofaa kwa wasomaji wengi.

Matumizi ya SQL_CALC_FOUND_ROWS na FOUND_ROWS() yana hitilafu fulani yanapotumiwa katika hoja za UNION, kwa kuwa taarifa za LIMIT zinaweza kutumika mahali kadhaa, na zinaweza kuathiri taarifa za SELECT ndani ya UNION na matokeo ya jumla ya UNION kwa ujumla. Madhumuni ya SQL_CALC_FOUND_ROWS kwa UNION ni kuhesabu idadi ya safu mlalo ambazo zitarejeshwa bila LIMIT ya kimataifa . Kwa hivyo, masharti ya kutumia SQL_CALC_FOUND_ROWS na hoja za UNION yanapaswa kutolewa:

  • Neno kuu la SQL_CALC_FOUND_ROWS lazima libainishwe katika taarifa ya kwanza CHAGUA;
  • Thamani ya FOUND_ROWS() itakuwa sahihi tu ikiwa UNION ALL itatumika. Ikiwa UNION imebainishwa bila ALL , uondoaji wa nakala hutokea na thamani ya FOUND_ROWS() itakuwa ya kukadiria tu;
  • Ikiwa LIMIT haipo katika UNION, basi SQL_CALC_FOUND_ROWS itapuuzwa na idadi ya safu mlalo katika jedwali la muda ambalo limeundwa kutekeleza UNION inarudishwa.