1 00:00:00,000 --> 00:00:03,388 >> [Speel van musiek] 2 00:00:03,388 --> 00:00:09,196 3 00:00:09,196 --> 00:00:10,180 >> David J. Malan Hello. 4 00:00:10,180 --> 00:00:12,600 Kom ons neem 'n wandeling deur Probleem Stel 8 Datavleg, 5 00:00:12,600 --> 00:00:15,880 wat gaan jy uit te daag om vestig op elemente vir Google Maps 6 00:00:15,880 --> 00:00:20,905 met elemente van Google Nuus en mash hulle saam in 'n web applet dat 7 00:00:20,905 --> 00:00:24,150 kan 'n gebruiker om te soek 'n kaart vir nuus plaaslike 8 00:00:24,150 --> 00:00:26,780 spesifieke dorpe, stede, en zip kodes. 9 00:00:26,780 --> 00:00:31,040 Om dit te doen, gaan ons sommige HTML integreer, CSS, PHP, SQL, 10 00:00:31,040 --> 00:00:34,390 JavaScript, en 'n tegniek algemeen bekend as AJAX om 11 00:00:34,390 --> 00:00:36,850 hierdie meeslepende te skep gebruikers ervaring. 12 00:00:36,850 --> 00:00:38,920 >> Kom ons kyk eers vir Google Maps self. 13 00:00:38,920 --> 00:00:41,220 Dit, natuurlik, is dalk 'n bekende interface. 14 00:00:41,220 --> 00:00:45,070 Maar dit blyk dat Google Maps bied ook 'n API-- aansoek 15 00:00:45,070 --> 00:00:48,360 programmering interface-- via wat jy elemente van Google Maps kan neem 16 00:00:48,360 --> 00:00:50,740 en integreer dit in jou eie programme. 17 00:00:50,740 --> 00:00:52,650 Inderdaad, in hierdie proses, jy gaan 18 00:00:52,650 --> 00:00:55,140 'n paar van URLs te vind veral nuttig dat 19 00:00:55,140 --> 00:00:57,820 is in die genoemde spesifikasie vir Probleem Stel 8, 20 00:00:57,820 --> 00:01:00,980 spesifiek hierdie slag Lei of die ontwikkelaar se Guide 21 00:01:00,980 --> 00:01:07,640 Google Maps API weergawe 3 asook as die Google Maps JavaScript API 22 00:01:07,640 --> 00:01:10,260 v3 verwysing, wat 'n bietjie meer arcane te lees 23 00:01:10,260 --> 00:01:14,600 maar eintlik het al van die laer vlak besonderhede oor watter funksies of metodes 24 00:01:14,600 --> 00:01:18,220 en voorwerpe en eienskappe gebeure eintlik kom met die API, 25 00:01:18,220 --> 00:01:20,720 baie soortgelyk in gees te [onhoorbaar] bladsye. 26 00:01:20,720 --> 00:01:23,480 >> Nou as ons neem 'n blik op Google News, sal jy 27 00:01:23,480 --> 00:01:25,370 miskien sien 'n bekende interface hier. 28 00:01:25,370 --> 00:01:29,350 Maar dit blyk jy kan ook soek Google Nuus vir spesifieke geografiese 29 00:01:29,350 --> 00:01:32,000 via 'n HTTP parameter genoem geo. 30 00:01:32,000 --> 00:01:35,100 In werklikheid, as ek zoom in hier, sal jy sien dat 31 00:01:35,100 --> 00:01:41,672 Ek is op news.google.com/news/section?geo=02138. 32 00:01:41,672 --> 00:01:43,630 En, inderdaad, as ek zoom uit, sal jy sien dat ek 33 00:01:43,630 --> 00:01:47,090 op soek na 'n bladsy met 'n hele klomp van die uitsig oor Cambridge, Massachusetts. 34 00:01:47,090 --> 00:01:50,620 >> Intussen, as ek eintlik verander die URL nie 'n kode soos hierdie te wees, 35 00:01:50,620 --> 00:01:55,580 maar iets 'n bietjie morsig soos Cambridge, + Massachusetts, 36 00:01:55,580 --> 00:02:00,740 waar die plus is die manier waarop jy enkodeer 'n ruimte karakter in 'n URL en druk Enter, 37 00:02:00,740 --> 00:02:02,907 jy sal sien dat ek eintlik sien byna dieselfde nuus. 38 00:02:02,907 --> 00:02:05,489 Miskien is dit 'n bietjie anders omdat Cambridge eintlik 39 00:02:05,489 --> 00:02:06,910 het verskeie rits kodes. 40 00:02:06,910 --> 00:02:09,410 Nou hoe sal ek weet dat en, in werklikheid, hoe kon ek een of ander manier 41 00:02:09,410 --> 00:02:12,940 bind stede en dorpe te rits kodes in geval ek 42 00:02:12,940 --> 00:02:15,064 die gebruiker wil toelaat om te kyk of? 43 00:02:15,064 --> 00:02:17,480 Wel, dit blyk dat daar 'n webwerf daar genoem 44 00:02:17,480 --> 00:02:20,060 geonames.org wat 'n inisiatief te hê 45 00:02:20,060 --> 00:02:23,760 'n vrylik beskikbaar databasis van alle vorme van geografiese inligting, 46 00:02:23,760 --> 00:02:27,040 nie net vir die VSA, maar ook vir ander lande. 47 00:02:27,040 --> 00:02:30,430 In werklikheid, as ek gaan na hierdie URL hier, wat ook in die probleem stel genoem 48 00:02:30,430 --> 00:02:34,510 spesifikasie, sal jy dit sien drie notering van 'n hele klomp van die zip-lêers 49 00:02:34,510 --> 00:02:36,400 enige van wat kan afgelaai word deur jou. 50 00:02:36,400 --> 00:02:39,900 Trouens, vir hierdie probleem stel jy gaan om af te laai us.zip. 51 00:02:39,900 --> 00:02:43,790 Nou in hierdie lêer is 'n hele n klomp van die data in teks formaat. 52 00:02:43,790 --> 00:02:47,760 Die lêers is baie soortgelyk aan 'n CSV-- Comma Separated Values ​​file-- 53 00:02:47,760 --> 00:02:51,294 maar dit eintlik gebruik tabs velde te baken. 54 00:02:51,294 --> 00:02:53,710 Nou, intussen, as jy kyk hier by wat ek uitgelig, 55 00:02:53,710 --> 00:02:56,459 Die velde in hierdie lêer gaan dinge soos land kodes te wees, 56 00:02:56,459 --> 00:02:58,980 poskodes, plekname, en dan, in een of ander vorm 57 00:02:58,980 --> 00:03:04,230 of ander state en provinsies, gemeenskappe, en nog baie meer. 58 00:03:04,230 --> 00:03:06,630 Trouens, ek het reeds hierdie lêer in advance afgelaai. 59 00:03:06,630 --> 00:03:09,750 Laat my gaan voort en maak dit oop here-- us.text-- en, inderdaad, sal jy 60 00:03:09,750 --> 00:03:16,660 sien as ek gaan na die lyn 16792 jy sal sien 'n paar rekords vir Cambridge, 61 00:03:16,660 --> 00:03:19,120 Massachusetts en sy verskillende zip kodes. 62 00:03:19,120 --> 00:03:22,150 Wat jy sien daar is ook die land, sommige getalle wat ek doen nie regtig 63 00:03:22,150 --> 00:03:24,500 verstaan ​​nie, maar ook al die pad aan die regterkant, 64 00:03:24,500 --> 00:03:27,170 sommige GPS coordinates-- breedtegraad en lengtegraad. 65 00:03:27,170 --> 00:03:30,440 Dit is groot, want een van die funksies van Google Maps API 66 00:03:30,440 --> 00:03:33,670 is die vermoë om op te spoor waar jy geografies 67 00:03:33,670 --> 00:03:36,850 in terme van GPS koördinate. 68 00:03:36,850 --> 00:03:40,210 >> Nou laat ons begin om uit te vind hoe om te begin vasmaak hierdie dinge saam. 69 00:03:40,210 --> 00:03:42,900 Ons het vir jou 'n hele n klomp van die verspreiding kode, 70 00:03:42,900 --> 00:03:44,970 sowel as MySQL databasis. 71 00:03:44,970 --> 00:03:49,100 In werklikheid, as ek trek 'n phpMyAdmin met reeds ingevoer, as jy gou sal, 72 00:03:49,100 --> 00:03:54,800 pset8.SQL, sal jy 'n MySQL tabel sien dat lyk soos hierdie, 'n ID-veld, land 73 00:03:54,800 --> 00:03:57,400 kode, poskode, plek naam en nog baie meer. 74 00:03:57,400 --> 00:04:00,490 Die tipes al daardie kolomme ek afgelei eenvoudig 75 00:04:00,490 --> 00:04:03,870 deur die lees van die readme.text lêer hier dat gespesifiseerde 76 00:04:03,870 --> 00:04:07,330 of 'n veld is 'n heelgetal, of varchar of die wil. 77 00:04:07,330 --> 00:04:10,510 >> Dus het ons geskep daardie tafel vir jy en jou gegee die SQL opdragte 78 00:04:10,510 --> 00:04:12,770 uit te voer wat aan die skep van tabel in jou eie databasis, 79 00:04:12,770 --> 00:04:15,290 maar daar is eintlik geen data in dit nog nie. 80 00:04:15,290 --> 00:04:19,600 Inteendeel, jy gaan te hê aflaai us.zip of enige land se ritssluiter 81 00:04:19,600 --> 00:04:21,500 lêer van die URL daar. 82 00:04:21,500 --> 00:04:24,940 En dan is jy gaan hê om te skryf 'n command line script in PHP dit is 83 00:04:24,940 --> 00:04:28,420 gaan om oop te maak dat die teks lêer, Itereer oor sy lyne, 84 00:04:28,420 --> 00:04:31,180 en dan vir elkeen van die lyne doen 'n insetsel 85 00:04:31,180 --> 00:04:34,940 in daardie plaas tafel in jou MySQL databasis. 86 00:04:34,940 --> 00:04:37,880 So aan die einde van hierdie proses, sal jy het dat script uiteindelik hardloop 87 00:04:37,880 --> 00:04:39,610 net een keer in teorie. 88 00:04:39,610 --> 00:04:41,780 In werklikheid sal jy waarskynlik loop dit 'n klomp van die tye 89 00:04:41,780 --> 00:04:45,460 terwyl hy probeer om verskeie foute op te los. 90 00:04:45,460 --> 00:04:48,440 >> Uiteindelik, jy gaan 'n te hê werklik 'n groot databasis met duisende 91 00:04:48,440 --> 00:04:50,139 en duisende geografiese rye. 92 00:04:50,139 --> 00:04:52,930 Dan is jy gaan om dit invoer te sit script opsy nadat dit werk 93 00:04:52,930 --> 00:04:55,140 en jou databasis is lekker en korrek is, en dan 94 00:04:55,140 --> 00:04:58,880 jy gaan om te beweeg op om werklik die implementering van die mashup self. 95 00:04:58,880 --> 00:05:01,670 Die mashup gaan om te kyk 'n bietjie iets soos hierdie. 96 00:05:01,670 --> 00:05:05,165 Op mashup.cs50.net, ons het 'n personeel oplossing 97 00:05:05,165 --> 00:05:06,990 wat lyk 'n bietjie iets soos hierdie. 98 00:05:06,990 --> 00:05:11,070 Inderdaad, as ek op die koerant ikoon vir Cambridge, Massachusetts, 99 00:05:11,070 --> 00:05:13,300 jy sal 'n spin sien ikoon kortliks en dan 100 00:05:13,300 --> 00:05:16,370 'n geordende lys, 'n kolpuntlys artikels 101 00:05:16,370 --> 00:05:18,280 verwant aan Cambridge, Massachusetts. 102 00:05:18,280 --> 00:05:20,352 As ek op Charlestown, Massachusetts, 103 00:05:20,352 --> 00:05:21,685 Ek sal dieselfde vir daardie dorp sien. 104 00:05:21,685 --> 00:05:24,174 En as ek op Watertown, Massachusetts, 105 00:05:24,174 --> 00:05:26,090 daar dalk nie wees nie nuus van van Watertown, 106 00:05:26,090 --> 00:05:28,630 sodat jy iets sien soos stadige nuus dag. 107 00:05:28,630 --> 00:05:32,140 >> Nou, intussen, op top links is 'n paar bekende Google Maps kontroles 108 00:05:32,140 --> 00:05:34,980 om jou te laat zoom uit, pan op, af, links en regs, 109 00:05:34,980 --> 00:05:37,360 maar ook 'n soekkassie dat ons sit daar. 110 00:05:37,360 --> 00:05:40,910 So as ek soek vir die waarheid te sê, Die enigste ander poskode ek weet, 111 00:05:40,910 --> 00:05:45,020 90210, sal ons eintlik sien Beverly Hills, Kalifornië. 112 00:05:45,020 --> 00:05:48,550 Wanneer gebruik dit lei my na Kalifornië en 'n hele klomp 113 00:05:48,550 --> 00:05:50,369 van die nuus oor Beverly Hills. 114 00:05:50,369 --> 00:05:51,910 Let nou ook, wat daar gebeur het. 115 00:05:51,910 --> 00:05:57,040 As ek hierdie tyd soek vir 02138 of selfs Cambridge komma Massachusetts of 'n 116 00:05:57,040 --> 00:06:00,300 variant daarvan, kry jy ' bietjie outovoltooiing dropdown. 117 00:06:00,300 --> 00:06:03,840 Nou hierdie is die gebruik van 'n prop vir 'n biblioteek genoem jQuery, 118 00:06:03,840 --> 00:06:05,732 en dat plugin genoem typeahead. 119 00:06:05,732 --> 00:06:07,440 Ons het eenvoudig deur te lees die dokumentasie, 120 00:06:07,440 --> 00:06:13,150 afgelaai van die Js lêer geïntegreerde in die verspreiding kode sodat jy 121 00:06:13,150 --> 00:06:16,900 uiteindelik kan die kode skryf dat vul daardie dropdown menu met die motor 122 00:06:16,900 --> 00:06:19,350 keuses of die motor voorstelle. 123 00:06:19,350 --> 00:06:23,820 >> Nou is die verspreiding kode, al is, dat jy ontvang dit nie doen nie naastenby so baie. 124 00:06:23,820 --> 00:06:26,860 Jy kry die Google Map ingebed, en jy die kontroles die top links, 125 00:06:26,860 --> 00:06:28,240 en jy kry die soekkassie. 126 00:06:28,240 --> 00:06:32,760 Maar as ek tik iets soos 02138, daar is geen plekke gevind nie. 127 00:06:32,760 --> 00:06:34,730 So wat gaan wees Een van ons doelwitte hier. 128 00:06:34,730 --> 00:06:37,430 Verder, as jy 'n stap rug en kyk na die kaart, 129 00:06:37,430 --> 00:06:38,950 daar is geen nuus hoegenaamd nie. 130 00:06:38,950 --> 00:06:41,780 Selfs as ek kliek en sleep, geen merkers eintlik 131 00:06:41,780 --> 00:06:45,560 verskyn vir nuus, want dit uitdaging word gelaat vir jou so goed. 132 00:06:45,560 --> 00:06:48,490 >> Kom ons neem 'n blik dan by die verspreiding kode. 133 00:06:48,490 --> 00:06:51,460 Sodra jy afgelaai pset8.zip en uitgeryk 134 00:06:51,460 --> 00:06:54,430 in jou vhost gids in die CS50 Appliance, 135 00:06:54,430 --> 00:06:56,550 jy sal sien hierdie dopgehou hier binne. 136 00:06:56,550 --> 00:07:00,200 Bin-- wat oor die algemeen staan ​​vir binêre vir uitvoerbare programs-- 137 00:07:00,200 --> 00:07:04,870 sluit, soos in pset7, sommige PHP lêers wat ander lêers insluit, 138 00:07:04,870 --> 00:07:06,710 dan publiek, wat is die lêers wat nodig 139 00:07:06,710 --> 00:07:09,369 om in die openbaar toeganklik wees aan 'n gebruiker met 'n leser. 140 00:07:09,369 --> 00:07:11,410 Kom ons neem 'n blik in die bin gids, en ons sal 141 00:07:11,410 --> 00:07:13,890 sien dat daar 'n lêer daar reeds genoem Invoer. 142 00:07:13,890 --> 00:07:17,591 As ons oop dit met gedit, sal ons sien wat, ongelukkig, is daar nie veel 143 00:07:17,591 --> 00:07:18,090 daar. 144 00:07:18,090 --> 00:07:20,250 Al wat daar is, al is, is 'n kaboedel op top 145 00:07:20,250 --> 00:07:23,410 wat bepaal wat interpreter-- in hierdie geval PHP-- 146 00:07:23,410 --> 00:07:25,759 moet gebruik word om werklik voer hierdie lêer. 147 00:07:25,759 --> 00:07:27,550 Maar dan waar dit sê TODO is waar jy is 148 00:07:27,550 --> 00:07:31,130 gaan 'n paar kode te skryf wat waarskynlik vereis dat die config 149 00:07:31,130 --> 00:07:35,820 lêer wat in die sluit gids Soos ons reeds gedoen met PHP lêers. 150 00:07:35,820 --> 00:07:38,180 En dan gaan jy moet een of ander manier oopmaak 151 00:07:38,180 --> 00:07:41,920 us.text wat jy vermoedelik het reeds oopgemaak. 152 00:07:41,920 --> 00:07:44,690 Dan gaan jy te hê Itereer oor die lyne in die lêer, 153 00:07:44,690 --> 00:07:47,800 dalk deur sommige van die funksies voorgestel in die spesifikasie. 154 00:07:47,800 --> 00:07:51,390 Dan voeg elk van dié lyne in MySQL databasis 155 00:07:51,390 --> 00:07:54,940 deur die gebruik van die navraag funksie, wat ons het julle weer voorsien with-- 156 00:07:54,940 --> 00:07:58,010 of ten minste 'n variant daarvan in functions.php, 157 00:07:58,010 --> 00:07:59,560 wat ons sal sien in net 'n oomblik. 158 00:07:59,560 --> 00:08:04,430 >> Nou laat sluit invoer en gaan terug na ons gids en hierdie keer gaan in 159 00:08:04,430 --> 00:08:05,300 sluit. 160 00:08:05,300 --> 00:08:09,210 En as ek doen ls daar is, sal jy sien drie lêers hou Probleem Stel 7. 161 00:08:09,210 --> 00:08:13,760 En laat ons neem 'n vinnige blik, byvoorbeeld by config.php. 162 00:08:13,760 --> 00:08:16,730 Daar is minder lyne as voorheen, en dit 163 00:08:16,730 --> 00:08:20,712 lyk hierdie lêer sluit constants.php en functions.php. 164 00:08:20,712 --> 00:08:23,670 Ons gebruik 'n effens verskillende tegniek hierdie keer om werklik 165 00:08:23,670 --> 00:08:30,910 spesifiseer dat hierdie lêers is relatief aan die huidige gids __ DIR__ 166 00:08:30,910 --> 00:08:35,280 verteenwoordig wat gids hierdie lêer, config.php, is self in. 167 00:08:35,280 --> 00:08:37,600 So, dit is 'n meer eksplisiete manier spesifiseer 168 00:08:37,600 --> 00:08:40,100 wat ander lêers wat jy wil om te vereis. 169 00:08:40,100 --> 00:08:44,020 >> Nou as ek sluit hierdie lêer en oopmaak constants.php plaas, 170 00:08:44,020 --> 00:08:47,430 jy sal 'n lêer te sien baie herinner vir Probleem Stel 7 se so goed, al is dit 171 00:08:47,430 --> 00:08:50,050 met 'n ander databasis genaamd pset8. 172 00:08:50,050 --> 00:08:54,020 Ten slotte, in functions.php, ons sal net een funksie te sien 173 00:08:54,020 --> 00:08:55,942 hierdie tyd genoem navraag. 174 00:08:55,942 --> 00:08:59,150 Dit is byna dieselfde, behalwe ons hanteer foute hierdie keer 'n bietjie 175 00:08:59,150 --> 00:09:02,860 anders, maar dit is die gebruik is dieselfde as in die probleem stel sewe. 176 00:09:02,860 --> 00:09:08,090 >> Nou laat ons gaan terug na ons pset8 gids, gaan in die openbaar, en daar 177 00:09:08,090 --> 00:09:14,420 as ek dit doen ls, sal jy sien this-- articles.php, index.html, search.php, 178 00:09:14,420 --> 00:09:16,940 en update.php-- alle lêers. 179 00:09:16,940 --> 00:09:22,010 En dan is die css fonts, img, en JS gids hou pset7. 180 00:09:22,010 --> 00:09:24,660 >> Kom ons neem 'n blik op index.html, wat is 181 00:09:24,660 --> 00:09:27,290 gaan regtig die wees inskrywing punt aan die smashup. 182 00:09:27,290 --> 00:09:31,820 Nou in index.html, sal jy 'n hele sien n klomp van die skakel elemente in die kop, 183 00:09:31,820 --> 00:09:36,540 spesifiek vir bootstrap vir ons eie CSS gevolg deur 'n hele klomp van die script 184 00:09:36,540 --> 00:09:41,520 tags vir dinge soos die kaarte, API self, 'n spesiale merker met die etiket 185 00:09:41,520 --> 00:09:44,950 nut wat ons in die genoemde spesifikasie is beskikbaar vir jou, 186 00:09:44,950 --> 00:09:48,420 jQuery self, bootstrap self, en 'n ander biblioteek 187 00:09:48,420 --> 00:09:50,990 genoem underscore wat ons praat oor in die spec. 188 00:09:50,990 --> 00:09:57,031 Underscore.js soos jquery.js is 'n JavaScript-biblioteek 189 00:09:57,031 --> 00:10:00,280 wat 'n hele klomp van die funksie dat baie van die mense in die wêreld wens 190 00:10:00,280 --> 00:10:02,020 bestaan ​​in JavaScript self. 191 00:10:02,020 --> 00:10:04,560 So al hierdie is eintlik baie gewild. 192 00:10:04,560 --> 00:10:07,140 Ons het ook genoem typeahead wat is die biblioteek wat 193 00:10:07,140 --> 00:10:11,180 doen dit outovoltooiing dropdown en uiteindelik 'n skakel na ons eie JavaScript. 194 00:10:11,180 --> 00:10:13,880 >> Intussen, en miskien Gelukkig, hierdie mashup 195 00:10:13,880 --> 00:10:17,550 word aangedryf deur relatief min HTML hier aan die onderkant. 196 00:10:17,550 --> 00:10:22,330 Kennis dat ons gespesifiseerde n div in ons liggaam van die klas-houer vloeistof. 197 00:10:22,330 --> 00:10:24,610 Dit, per bootstrap se dokumentasie, net 198 00:10:24,610 --> 00:10:29,840 beteken dat hierdie div gaan die te vul vertoonvenster of venster ten volle die leser. 199 00:10:29,840 --> 00:10:33,020 >> Intussen, onder dat ons 'n div dit is geopen en onmiddellik gesluit 200 00:10:33,020 --> 00:10:34,790 met die unieke ID van kaart doek. 201 00:10:34,790 --> 00:10:37,400 Dit is nou van Google Kaarte dokumentasie 202 00:10:37,400 --> 00:10:42,490 vir sy API, waardeur ek net nodig het om te 'n leë div waarin te spuit, 203 00:10:42,490 --> 00:10:44,470 Uiteindelik, 'n werklike Google Maps. 204 00:10:44,470 --> 00:10:46,310 Maar meer oor dit in net 'n bietjie. 205 00:10:46,310 --> 00:10:48,850 >> Ten slotte, daar is 'n vorm binnekant van hier wat 206 00:10:48,850 --> 00:10:52,930 implemente die teks boks aan links bo in ons koppelvlak vir die soek. 207 00:10:52,930 --> 00:10:54,730 Kennis dat ons gebruik 'n bietjie van 'bootstrap 208 00:10:54,730 --> 00:10:57,670 hier too-- dinge soos vorm-inline en vorm-groep. 209 00:10:57,670 --> 00:11:00,080 Ons het die voormalige gegee unieke ID vorm. 210 00:11:00,080 --> 00:11:04,510 En dan, uiteindelik, ek het eintlik ' 'n inset tipe, wat is redelik vertroud, 211 00:11:04,510 --> 00:11:06,440 wie ID is q. 212 00:11:06,440 --> 00:11:07,230 Net 'n konvensie. 213 00:11:07,230 --> 00:11:09,234 Q vir query-- kan hê is iets genoem. 214 00:11:09,234 --> 00:11:11,400 En dan is die plekhouer, Intussen is stad, provinsie, 215 00:11:11,400 --> 00:11:16,200 en poskode wat jy kan onthou sien in ons mashup demo vroeër. 216 00:11:16,200 --> 00:11:17,980 Kom ons sluit hierdie lêer. 217 00:11:17,980 --> 00:11:24,460 >> Nou neem 'n blik op die PHP lêers wat wag en dan die JavaScript-lêers. 218 00:11:24,460 --> 00:11:27,700 In ons PHP lêers, ons het reeds vir jou geïmplementeer word, 219 00:11:27,700 --> 00:11:29,960 byvoorbeeld updates. 220 00:11:29,960 --> 00:11:35,060 Update.php-- sal ons nie spandeer 'n groot bedrag van die tyd op here-- in 'n neutedop 221 00:11:35,060 --> 00:11:38,400 is die lêer wat ons JavaScript-kode gaan 222 00:11:38,400 --> 00:11:41,610 te kontak via AJAX dat asynchrone tegniek wat 223 00:11:41,610 --> 00:11:45,980 gebou in JavaScript hierdie dae wat gaan toelaat om ons te vra update.php 224 00:11:45,980 --> 00:11:47,410 vir meer inligting. 225 00:11:47,410 --> 00:11:50,045 >> Spesifiek, enige tyd die gebruiker sleep die kaart 226 00:11:50,045 --> 00:11:53,310 of 'n soektog wat spring die gebruiker na 'n ander plek, 227 00:11:53,310 --> 00:11:55,250 ons JavaScript-kode, soos ons sal gou sien, is 228 00:11:55,250 --> 00:11:59,610 gaan update.php te roep en vra vir 10 of so merkers 229 00:11:59,610 --> 00:12:02,630 binne die vertoonvenster gebaseer op die GPS koördinate 230 00:12:02,630 --> 00:12:06,510 van die boonste en onderste hoeke van die kaart. 231 00:12:06,510 --> 00:12:10,520 Ons kan dan repopulate die kaart nou dat die gebruiker die skerm om verhuis 232 00:12:10,520 --> 00:12:14,210 om te sien 10 waarskynlik nuwe merkers vir verskillende dorpe. 233 00:12:14,210 --> 00:12:18,340 Intussen hierdie lêer is uiteindelik gaan 'n SQL navraag uit te voer 234 00:12:18,340 --> 00:12:21,680 teen ons databasis tabel genaamd plekke wat 235 00:12:21,680 --> 00:12:26,380 gaan diegene om terug te keer 10 of minder plekke. 236 00:12:26,380 --> 00:12:32,620 >> Intussen, in articles.php, is 'n ander lêer ons in sy geheel geskryf het. 237 00:12:32,620 --> 00:12:35,820 Dit is baie soortgelyk in gees Probleem Stel 7 se funksie ZOEKEN, 238 00:12:35,820 --> 00:12:39,450 wat gekontak Yahoo Finansies vir jou. 239 00:12:39,450 --> 00:12:43,710 Hierdie lêer kontakte Google Nuus vir jou, uiteindelik gryp 240 00:12:43,710 --> 00:12:46,050 'n masjien-leesbare version-- in iets 241 00:12:46,050 --> 00:12:49,720 genoem RSS lêerformaat van die nuus Cambridge of Beverly Hills 242 00:12:49,720 --> 00:12:52,880 of wat ook al dorp wat jy het gesoek vir wat gebaseer is op wat geoparameter. 243 00:12:52,880 --> 00:12:57,250 Ons ontleed wat RSS, wat net 'n tipe opmaak taal genoem XML, 244 00:12:57,250 --> 00:13:00,740 en dan moet ons eintlik stuur dit terug aan die leser 245 00:13:00,740 --> 00:13:03,570 en na jou JavaScript-kode, spesifiek, in 'n formaat genoem 246 00:13:03,570 --> 00:13:06,097 Into JavaScript Object notasie. 247 00:13:06,097 --> 00:13:08,180 Nou sal jy sien in die specification-- wys ons jou 248 00:13:08,180 --> 00:13:10,720 hoe jy kan eintlik sien sommige van die into koms back-- 249 00:13:10,720 --> 00:13:15,210 dat hierdie funksie uiteindelik kan jy die opspring kieslyste vul so 250 00:13:15,210 --> 00:13:16,960 dat wanneer jy kliek op 'n merker op die kaart 251 00:13:16,960 --> 00:13:19,430 sien jy eintlik 'n hele klomp van die koeëls, wat elk 252 00:13:19,430 --> 00:13:21,020 skakels na 'n artikel. 253 00:13:21,020 --> 00:13:25,000 >> Nou kom ons neem 'n blik op 'n laaste PHP lêer wat gelukkig nie 254 00:13:25,000 --> 00:13:27,970 veel gaan on-- net 'n mooi groot TODO. 255 00:13:27,970 --> 00:13:32,170 Nou hierdie lêer verklaar 'n skikking met die naam plekke. 256 00:13:32,170 --> 00:13:35,980 En dan uiteindelik afdrukke wat opgestel in into lêerformaat 257 00:13:35,980 --> 00:13:38,720 mooi-druk dit net so dat dinge is makliker om te ontfout. 258 00:13:38,720 --> 00:13:41,480 Ongelukkig, in die middel is daar hierdie TODO, 259 00:13:41,480 --> 00:13:46,890 waarin gevra word vir jou die soek databasis vir plekke wat ooreenstem met 'n geo HTTP 260 00:13:46,890 --> 00:13:47,490 parameter. 261 00:13:47,490 --> 00:13:49,865 >> En, inderdaad, dit gaan een van jou challenges-- 262 00:13:49,865 --> 00:13:54,240 hierdie funksie om hier te implementeer sodat wanneer jy kontak hierdie lêer met 263 00:13:54,240 --> 00:14:00,610 'n URL soos search. php? geo = iets, jou kode sal uiteindelik terug 'n into 264 00:14:00,610 --> 00:14:05,020 verskeidenheid van al die plekke in jou databasistabel wat ooreenstem dat insette. 265 00:14:05,020 --> 00:14:08,960 So as die gebruiker in Cambridge, jou lêer hier search.php 266 00:14:08,960 --> 00:14:12,680 moet uiteindelik teruggaan n into verskeidenheid vir al die wedstryde vir Cambridge, 267 00:14:12,680 --> 00:14:16,990 wat dalk in Massachusetts maar kan selfs nêrens anders wees. 268 00:14:16,990 --> 00:14:21,040 >> Laastens, laat ons neem 'n blik op twee lêers wat statiese ultimately-- 269 00:14:21,040 --> 00:14:23,680 jou CSS-lêer en jou JavaScript-lêer. 270 00:14:23,680 --> 00:14:26,779 As ek gaan in ons CSS gids, daar is 'n hele klomp van die lêers daar, 271 00:14:26,779 --> 00:14:28,070 maar die meeste van hulle is biblioteke. 272 00:14:28,070 --> 00:14:31,530 Ek gaan 'n blik te neem, spesifiek op styles.css, 273 00:14:31,530 --> 00:14:35,440 wat is ons eie globale CSS dit is gaan hierdie hele mashup te stileer. 274 00:14:35,440 --> 00:14:38,840 Ek sal laat dit aan jou deur te lees die kommentaar hierin, maar in 'n neutedop, 275 00:14:38,840 --> 00:14:43,490 dit is die CSS wat verseker dat ons mashup, by verstek uit die boks, 276 00:14:43,490 --> 00:14:46,950 lyk presies die manier waarop ons wil it-- met die kaart in te vul die oog hawe 277 00:14:46,950 --> 00:14:49,720 en met die soek boks by die top links. 278 00:14:49,720 --> 00:14:52,870 Ons het ook die vryheid van geneem stylizing dat typeahead dropdown 279 00:14:52,870 --> 00:14:55,170 spyskaart 'n bietjie so goed. 280 00:14:55,170 --> 00:14:58,030 >> Die belangrikste lêer miskien vir hierdie probleem stel 281 00:14:58,030 --> 00:15:01,070 is hierdie laaste een, scripts.js. 282 00:15:01,070 --> 00:15:03,800 Binnekant van jou JS gids is selfs meer lêers. 283 00:15:03,800 --> 00:15:08,090 Almal van hulle is die biblioteek lêers behalwe vir hierdie een, scripts.js. 284 00:15:08,090 --> 00:15:11,460 As ons oop hierdie up, laat ons ons finale toer deur die funksies wat 285 00:15:11,460 --> 00:15:13,820 is gebou in die lêer vir jou en oproep aandag 286 00:15:13,820 --> 00:15:16,200 aan die Todos wat voorlê. 287 00:15:16,200 --> 00:15:19,110 >> Op die top van hierdie lêer, is drie globale veranderlikes. 288 00:15:19,110 --> 00:15:22,910 Een vir 'n kaart, wat gaan 'n verwysing na ons Google kaart. 289 00:15:22,910 --> 00:15:25,510 Jy kan dink dit soort van soos 'n wyser. 290 00:15:25,510 --> 00:15:27,710 Intussen het ons 'n ander globale veranderlike 291 00:15:27,710 --> 00:15:31,500 genoem inligting, wat blyk te wees, stoor die terugkeer waarde van 'n oproep 292 00:15:31,500 --> 00:15:34,170 nuwe google.maps.InfoWindow. 293 00:15:34,170 --> 00:15:37,835 JavaScript ondersteun voorwerpe wat is baie soortgelyk in gees stutte. 294 00:15:37,835 --> 00:15:40,250 En wat hierdie lyn vir ons doeleindes doen 295 00:15:40,250 --> 00:15:42,820 is 'n nuwe inligting venster in die geheue en dan 296 00:15:42,820 --> 00:15:46,330 hou om 'n verwysing daartoe in 'n veranderlike genoem Info. 297 00:15:46,330 --> 00:15:48,330 En in tussen daardie, Intussen is wat blyk 298 00:15:48,330 --> 00:15:51,060 te wees om 'n leë JavaScript skikking met die naam merkers. 299 00:15:51,060 --> 00:15:55,392 Al dié koerant ikone, of jy dalk 'n ander ikoon heeltemal kies, 300 00:15:55,392 --> 00:15:57,350 gaan gestoor moet word uiteindelik in hierdie reeks 301 00:15:57,350 --> 00:16:01,570 sodat ons kan baie maklik voeg die kaart en verwyder hulle uit die kaart. 302 00:16:01,570 --> 00:16:03,990 >> Nou laat rol af 'n bietjie en gefluit 303 00:16:03,990 --> 00:16:07,690 deur die kode wat gaan wees uitgevoer sodra die DOM of dokument 304 00:16:07,690 --> 00:16:10,480 voorwerp model of die bladsy self is gereed. 305 00:16:10,480 --> 00:16:12,942 Onthou dat hierdie sintaksis hier eenvoudig spesifiseer 306 00:16:12,942 --> 00:16:14,900 dat die volgende kode moet slegs uitgevoer word 307 00:16:14,900 --> 00:16:17,840 wanneer die leser het klaar laai alles anders. 308 00:16:17,840 --> 00:16:19,750 >> Ons eerste verklaar hele klomp van style, 309 00:16:19,750 --> 00:16:22,410 wat uiteindelik stylizing die kaart soos per die spec. 310 00:16:22,410 --> 00:16:24,790 Ons het toe verklaar hele klomp van opsies, 311 00:16:24,790 --> 00:16:28,630 wat verder aan te pas die Google kaart dat ons oor te sluit. 312 00:16:28,630 --> 00:16:32,090 Ons gebruik dan 'n bietjie van jQuery kode, wat in 'n bietjie meer detail verduidelik word 313 00:16:32,090 --> 00:16:35,000 in die spec, aan te gryp daardie element, kaart-doek 314 00:16:35,000 --> 00:16:36,980 dat ons so uniek geïdentifiseer. 315 00:16:36,980 --> 00:16:40,640 En dan hierdie lyn hier is wat blyk te mettertyd gee ons 316 00:16:40,640 --> 00:16:43,560 'n Google kaart binnekant van ons eie aansoek, 317 00:16:43,560 --> 00:16:47,020 stoor 'n verwysing daarna in daardie veranderlike genoem kaart. 318 00:16:47,020 --> 00:16:50,550 >> Ten slotte, hier is ons registreer wat is bekend as 'n luisteraar. 319 00:16:50,550 --> 00:16:54,690 Dink back-- manier, manier back-- te week nul in CS50 320 00:16:54,690 --> 00:16:57,430 wanneer ons kyk na Scratch en sy steun deur 'n wandeling 321 00:16:57,430 --> 00:16:59,935 deur vir dinge genoem gebeure en uitsendings. 322 00:16:59,935 --> 00:17:01,810 Jy kan nie gebruik het dit self, maar dit is 323 00:17:01,810 --> 00:17:03,900 'n meganisme waardeur 'n leser in hierdie geval 324 00:17:03,900 --> 00:17:07,940 kan ons aandag kry wanneer dit gereed om te eintlik 'n paar kode voer. 325 00:17:07,940 --> 00:17:12,170 In hierdie geval, dit gaan om te luister na die kaart vir 'n gebeurtenis genaamd idle. 326 00:17:12,170 --> 00:17:14,930 Dit beteken dat die leser het klaar laai die Google kaart. 327 00:17:14,930 --> 00:17:18,380 Op hierdie punt 'n funksie genoem instel moet uiteindelik 328 00:17:18,380 --> 00:17:19,339 word uitgevoer. 329 00:17:19,339 --> 00:17:22,510 Daardie funksie, instel, ons sal sien, is geskryf deur ons. 330 00:17:22,510 --> 00:17:24,550 >> Nou hier is 'n funksie wat, ongelukkig, 331 00:17:24,550 --> 00:17:25,871 is net 'n TODO add merker. 332 00:17:25,871 --> 00:17:28,620 Per die spec. jy gaan nodig die kode wat eintlik skryf 333 00:17:28,620 --> 00:17:32,840 voeg 'n marker-- of dit lyk soos 'n koerant, of 'n duim ryg, 334 00:17:32,840 --> 00:17:35,360 of iets else-- die Google kaart. 335 00:17:35,360 --> 00:17:37,720 Hier is nou dat funksie genoem instel. 336 00:17:37,720 --> 00:17:40,390 Ek sal laat dit aan jou om te lees deur dit in meer detail, 337 00:17:40,390 --> 00:17:42,600 maar besef dat ons by te voeg 'n klomp meer Luisteraars 338 00:17:42,600 --> 00:17:46,620 sodat ons kan kode voer wanneer die gebruiker kliek op en sleep die kaart. 339 00:17:46,620 --> 00:17:50,730 Ons het ook 'kode hier dat initialisatie dat typeahead plugin 340 00:17:50,730 --> 00:17:53,120 sodat die dropdown spyskaart werk eintlik. 341 00:17:53,120 --> 00:17:55,690 >> Maar laat ons fokus op net 'n paar plekke hierin. 342 00:17:55,690 --> 00:17:57,590 Spesifiek, om dit te doen hier. 343 00:17:57,590 --> 00:18:00,410 Ek sal stel om die aanlyn dokumentasie en die spesifikasie 344 00:18:00,410 --> 00:18:02,530 hoe om in hierdie TODO vul. 345 00:18:02,530 --> 00:18:05,890 Maar in 'n neutedop, hierdie biblioteek typeahead kan jy om te slaag 346 00:18:05,890 --> 00:18:09,790 in wat algemeen bekend staan ​​as 'n sjabloon, wat het 'n paar veranderlike plekhouers 347 00:18:09,790 --> 00:18:13,690 baie soortgelyk in gees printf se%. * s. 348 00:18:13,690 --> 00:18:16,030 Maar in hierdie geval, die sjabloon per die spec 349 00:18:16,030 --> 00:18:18,760 kan u spesifiseer wat veranderlikes wat jy wil hê 350 00:18:18,760 --> 00:18:24,880 te spuit uit data wat kom terug van iets soos die PHP 351 00:18:24,880 --> 00:18:29,810 lêers wat jy geskryf het wat afgee into uitset. 352 00:18:29,810 --> 00:18:35,170 >> Nou hier besef dat ons luister vir typeahead keuses 353 00:18:35,170 --> 00:18:38,050 wanneer die gebruiker eintlik doen 'n soektog en kies 'n waarde. 354 00:18:38,050 --> 00:18:40,270 Dit is hoe ons is eintlik gaan luister vir daardie 355 00:18:40,270 --> 00:18:42,250 en 'n paar kode voer as 'n resultaat. 356 00:18:42,250 --> 00:18:45,300 Toe ons voortgaan om te instel die mashup net 'n bietjie. 357 00:18:45,300 --> 00:18:48,000 En, uiteindelik, ons noem hierdie funksie update. 358 00:18:48,000 --> 00:18:49,640 Dit updates die merkers op die skerm. 359 00:18:49,640 --> 00:18:51,529 Meer oor wat in net 'n oomblik. 360 00:18:51,529 --> 00:18:53,570 Intussen is daar 'n paar klein funksies in hier. 361 00:18:53,570 --> 00:18:56,820 Waarvan een is hideInfo wat eenvoudig sluit die InfoWindow. 362 00:18:56,820 --> 00:19:00,020 'N Ander funksie hier, wat uiteindelik sal nie te lank wees nie, verwyder merkers. 363 00:19:00,020 --> 00:19:03,580 Dit gaan ongedaan te maak wat jou add merker funksie doen. 364 00:19:03,580 --> 00:19:04,960 En dan hier is soek. 365 00:19:04,960 --> 00:19:08,610 En hierdie een is interessant, want ons het die JavaScript-kode wat geskryf 366 00:19:08,610 --> 00:19:13,490 gaan om te praat met search.php op die bediener en kry terug wat reaksie. 367 00:19:13,490 --> 00:19:16,110 >> Jy, natuurlik, sal steeds moet search.php te implementeer, 368 00:19:16,110 --> 00:19:18,310 maar ons het geïmplementeer om die JavaScript-kode wat 369 00:19:18,310 --> 00:19:22,480 gaan eintlik hanteer presteer soek van dié teks boks. 370 00:19:22,480 --> 00:19:25,340 In die besonder, kennisgewing dat hierdie funksie hier, 371 00:19:25,340 --> 00:19:29,160 soek, nie noem search.php deur 'n metode genoem 372 00:19:29,160 --> 00:19:31,072 kry into, wat ons gesien het in lesing. 373 00:19:31,072 --> 00:19:32,780 En die sintaksis hier is 'n bietjie anders 374 00:19:32,780 --> 00:19:37,110 vanaf lesing in dat ons met behulp van jQuery sogenaamde belofte koppelvlak. 375 00:19:37,110 --> 00:19:38,479 Meer oor wat in die spec. 376 00:19:38,479 --> 00:19:40,520 Dit beteken eenvoudig vir ons doeleindes nou dat daar 377 00:19:40,520 --> 00:19:43,870 is twee spesiale funksies wat ons nodig het om te bel met dot-notasie 378 00:19:43,870 --> 00:19:46,230 hier onmiddellik na die roeping kry into. 379 00:19:46,230 --> 00:19:47,510 Een gedoen genoem. 380 00:19:47,510 --> 00:19:49,870 Een is genoem misluk. 381 00:19:49,870 --> 00:19:51,790 Jy kan dink van hierdie as die sukses hanteerder 382 00:19:51,790 --> 00:19:54,960 en die mislukking hanteerder net in geval iets verkeerd gaan. 383 00:19:54,960 --> 00:19:57,760 >> Nou laat ons kyk na die laaste paar funksies in hierdie lêer. 384 00:19:57,760 --> 00:20:00,180 Hier is 'n funksie genoem showInfo, wat 385 00:20:00,180 --> 00:20:03,090 toon inligting in een van daardie bietjie info vensters wat 386 00:20:03,090 --> 00:20:05,380 verskyn wanneer die gebruiker 'n merker kliek. 387 00:20:05,380 --> 00:20:08,470 Hier is verder dat update funksie 388 00:20:08,470 --> 00:20:10,510 dat ons vir jou geïmplementeer. 389 00:20:10,510 --> 00:20:15,250 Dit bepaal die grense van die kaart. 390 00:20:15,250 --> 00:20:19,360 Wat is die GPS koördinate van sy noordooste en suidweste hoeke hier. 391 00:20:19,360 --> 00:20:22,780 Ons het voorberei sommige HDP parameters hier en dan verby hulle uiteindelik 392 00:20:22,780 --> 00:20:26,160 te update.php, wat ons het ook geïmplementeer vir jou. 393 00:20:26,160 --> 00:20:31,390 Wat kry uiteindelik terug sommige into uit die lêer genaamd update.php 394 00:20:31,390 --> 00:20:34,050 en verwyder dan enige merkers op die skerm 395 00:20:34,050 --> 00:20:36,650 en dan herhaal oor die data wat is terug te kom 396 00:20:36,650 --> 00:20:40,350 van update.php, wat weer is net 'n into skikking. 397 00:20:40,350 --> 00:20:45,130 En dan is dit uiteindelik voeg 'n merker vir elk van die plekke, hantering mislukking 398 00:20:45,130 --> 00:20:47,750 of foute wat dalk baie goed gebeur. 399 00:20:47,750 --> 00:20:51,550 >> Nou net om te gee jou 'n voorsmakie van hoe jy kan gaan oor die opsporing van hierdie projek, 400 00:20:51,550 --> 00:20:55,420 besef dat ek in oopgemaak het bevorder hierdie blad hier om hierdie URL, 401 00:20:55,420 --> 00:21:01,320 pset8 / articles.php? geo = 02138. 402 00:21:01,320 --> 00:21:04,050 Nou, weer, artikels oor PHP ons geïmplementeer vir jou 403 00:21:04,050 --> 00:21:06,320 so dit is nie soseer wat jy sal gebruik word om 404 00:21:06,320 --> 00:21:08,190 te ontfout, maar eerder die tegniek. 405 00:21:08,190 --> 00:21:10,590 Kennis dat ek gesoek Cambridge se poskode hier, 406 00:21:10,590 --> 00:21:15,260 en ek het terug gekry, inderdaad, 'n into verskeidenheid van into voorwerpe binnekant van wat 407 00:21:15,260 --> 00:21:17,640 is twee keys-- skakel en titel. 408 00:21:17,640 --> 00:21:19,860 >> So hierdie funksie werk reeds vir jou. 409 00:21:19,860 --> 00:21:24,330 Maar hierdie tegniek van die hand gaan na 'n URL soos hierdie vir iets soos 410 00:21:24,330 --> 00:21:31,710 search.php? geo = Cambridge of 02138 of wat die gebruiker getik in behoort 411 00:21:31,710 --> 00:21:35,770 bewys van onskatbare waarde as jy self probeer om uit te vind presies of waarom 412 00:21:35,770 --> 00:21:38,510 search.php werk of nie. 413 00:21:38,510 --> 00:21:41,720 >> Uiteindelik dan, jy het 'n paar Todos voor jou. 414 00:21:41,720 --> 00:21:44,250 Jy gaan na die eerste implemente dat die invoer script wat 415 00:21:44,250 --> 00:21:46,520 lees in us.text in jou databasis. 416 00:21:46,520 --> 00:21:48,760 Jy dan gaan nodig search.php te implementeer 417 00:21:48,760 --> 00:21:51,320 sodat dit optree presies soos gespesifiseer. 418 00:21:51,320 --> 00:21:54,170 Jy dan gaan wil om te fokus op scripts.js 419 00:21:54,170 --> 00:21:57,520 en uiteindelik implemente diegene paar Todos, 420 00:21:57,520 --> 00:21:59,950 insluitend instel en dat sjabloon, 421 00:21:59,950 --> 00:22:03,220 voeg, opsieners verwyder, en dan laaste, maar nie die minste nie, die een 422 00:22:03,220 --> 00:22:04,330 persoonlike touch. 423 00:22:04,330 --> 00:22:07,477 >> Sodra jy jou mashup werk baie soos ons s'n, is die doel aan die hand 424 00:22:07,477 --> 00:22:09,560 is vir jou om by te voeg 'n persoonlike raak aan jou mashup, 425 00:22:09,560 --> 00:22:11,290 of dit nou estetiese of funksionele. 426 00:22:11,290 --> 00:22:13,950 Neem die mashup ooit so effens na die volgende vlak. 427 00:22:13,950 --> 00:22:18,330 So lank as wat jy druk jouself buite jou bekendheid met die spec self 428 00:22:18,330 --> 00:22:20,840 en haal een tegniek nuwe, selfs al is dit net 429 00:22:20,840 --> 00:22:25,610 iets estetiese soos die verandering van die uitleg van die kaart wat jy gebruik, 430 00:22:25,610 --> 00:22:28,070 die omvang wat ons verwag tevrede sal wees. 431 00:22:28,070 --> 00:22:30,260 Dit is dan Probleem Stel 8 Datavleg. 432 00:22:30,260 --> 00:22:33,070 Bly ingeskakel vir meer in die spesifikasie en die beste van geluk 433 00:22:33,070 --> 00:22:36,400 aanpak van hierdie, jou laaste CS50 probleem stel ooit. 434 00:22:36,400 --> 00:22:39,750 >> [Speel van musiek] 435 00:22:39,750 --> 00:22:43,542