1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang="en" data-lang="en" id="rotita" xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="p:domain_verify" content="fbb406654290b26d5e26070e65ab7ba3"/><meta name="keywords" content="Rotita Blog, Rotita Swimwear, Rotita Tops, Rotita Dresses" /><meta name="description" content="Explore vacation outfit ideas, fashion inspo for mature women at Rotita officail blog" /><meta name="referrer" content="no-referrer-when-downgrade"><link rel="shortcut icon" href="https://www.rotita.com/favicon.ico" /><link rel="canonical" href="https://www.rotita.com" /><link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.rotita.com" /><link rel="stylesheet" type="text/css" href="https://www.rotita.com/themes/en/swiper-bundle.min.css">
1<script src="https://www.rotita.com/themes/en/js/swiper-bundle.min.js"></script>
1<script src="https://www.rotita.com/js/jquery-1.8.0.min.js"></script>
1<script src="https://www.rotita.com/js/vue.min.js"></script>
1<style> 2 .blog { 3 max-width: 1200px; 4 margin: 0 auto; 5 padding: 20px; 6 } 7 8 .blog-header { 9 text-align: center; 10 margin-bottom: 20px; 11 } 12 13 .blog-nav ul { 14 margin: 0px auto; 15 padding: 20px; 16 width: 1200px; 17 } 18 19 .blog-nav ul li { 20 display: inline-block; 21 margin-right: 10px; 22 } 23 24 .blog-main .blog-post { 25 background: #f7f7f7; 26 padding: 40px; 27 border-top: 1px solid #f7f7f7; 28 } 29 30 .blog-main .blog-post-normal { 31 background: white; 32 padding: 40px 0px; 33 border-top: 1px solid #ccc; 34 } 35 36 .blog-main h2 { 37 margin-bottom: 10px; 38 } 39 40 /*.blog-main p { 41 margin-bottom: 0; 42 }*/ 43 .blog-nav{background-color: #ffffff;box-shadow: 0px 1px 5px rgba(0,0,0, 0.1);} 44 .swiper-container{max-width: 1200px;overflow: hidden;position: relative;} 45 .flex-row{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;} 46 47 .entry-header { 48 background-position: center center; 49 } 50 .entry-header { 51 width: 100%; 52 } 53 .read-more a{color: black;font-size: 18px;font-weight: bold;} 54 .blog-nav-ul{padding: 0px 20px;} 55 .blog-nav-ul li a{font-size: 18px;color :black;min-width: 200px;text-align: center;} 56 .flex-row-center{flex-direction: row;justify-content: space-between;flex-wrap: nowrap;} 57 .blog-nav-ul{width: 80%;padding: 0px 5px;} 58 .blog-main-logo{font-size: 64px;font-weight: bold;margin-right: 5px;} 59 .blog-main-title{color: #464646;font-size: 16px;} 60 .blog-main-img{} 61 .blog-main-content{padding-left: 37px;} 62 .read-more{margin-top: 20px;} 63 .read-more a{display: inline-block;padding: 0 25px;border: 1px solid #ca9b52;font-size: 13px;line-height: 40px;font-weight: bold;letter-spacing: 2px;text-transform: uppercase;cursor: pointer;color: #ca9b52;} 64 /* .read-more a::hover{ 65 border: 1px solid #c6a572;color: #c6a572; 66 } */ 67 .read-more a::hover{ 68 border: 1px solid black;color: black;cursor: pointer; 69 } 70 .blog-nav-ul li a:hover{color: #6d120f;cursor: pointer;} 71 .blog-nav-ul li a.choose{color: #6d120f;} 72 73 #swiper-container .swiper-button-prev,#swiper-container .swiper-button-next {color: white;font-weight: bold;} 74 #swiper-container .swiper-pagination-bullet{width: var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,14px));height: var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,14px));} 75 #swiper-container .swiper-slide{position: relative;} 76 #swiper-container .slider-info{position: absolute;top: 0px;bottom: 0px;right: 0px;left: 0px;margin: 0px auto;padding: 0px 15%;background-color: rgba(73,73,73, 0.3);box-sizing: border-box;} 77 .slider-info .slider-categories a{color: white;text-align: center;font-size: 13px;} 78 .slider-info h2 a{color: white;text-align: center;font-size: 36px;} 79 .slider-info .slider-title a{color: white;text-align: center;} 80 .slider-info .slider-content p{color: white;text-align: center;} 81 .blog-main-title{display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;overflow: hidden;text-overflow: ellipsis;} 82 .slider-content p{display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;overflow: hidden;text-overflow: ellipsis;} 83 #swiper-container .swiper-pagination-bullet-active{background: white;} 84 /* æ ·å¼å¯ä»¥æ ¹æ®éè¦è¿è¡è°æ´ */ 85 #pagination { 86 display: flex; 87 justify-content: center; 88 margin: 10px; 89 } 90 91 #pagination button { 92 margin: 0px 2px; 93 padding: 14px 15px; 94 background-color: #333333; 95 color: white; 96 border: none; 97 cursor: pointer; 98 } 99 100 #pagination button.active { 101 color: white; 102 background-color: #ca9b52; 103 } 104 .carousel-content .read-more a{ 105 margin: 0px auto; 106 border: 1px solid white; 107 color: white; 108 display: block; 109 width: 100px; 110 } 111 [v-cloak] { 112 display: none; 113 } 114 </style></head><body><header class="blog-header"><p style="font-size: 40px;margin-bottom: 24px;"><a href="https://www.rotita.com/blog/" style="color: #000000;text-decoration: none;">Rotita Official Blog</a></p><p style="font-size:24px;">Explore vacation outfit ideas, fashion inspo</p></header><div id="app"><div class="entry-header"><a v-bind:href="top_banner.location_url"><img v-cloak v-bind:src="top_banner.banner_dialog_url" width="100%" style=" 115 display: none;" /></a></div><div class="blog-nav"><ul class="blog-nav-ul flex-row flex-row-center"><li v-for="cat in catlist">
115<a @click="chooseCat(cat.cat_id)" :id="'cat_' + cat.cat_id" v-cloak>{{cat.cat_name}}</a></li></ul></div><div class="blog"><div class="swiper-container" id="swiper-container"><div class="swiper-wrapper"><div v-for="carousel in carousels" class="swiper-slide"><img :src="carousel.img" alt="Image 1" style="width: 100%;height: 600px;"/><div class="slider-info flex-row carousel-content" style="flex-direction: column;justify-content: center;"><h2 class="flex-row" style="justify-content: center;"><a :href="'javascript:void(0)'" @click.prevent="goToDetail(carousel.url)" tabindex="0" v-cloak>{{carousel.cat_name}}| {{carousel.author}}</a></h2><div class="slider-title flex-row" style="justify-content: center;color: white;font-size: 36px;text-align: center;" v-cloak> 116 {{carousel.title}} 117 </div><div class="slider-content"><p v-cloak>{{carousel.content}}</p></div><div class="read-more"><a :href="'javascript:void(0)'" @click.prevent="goToDetail(carousel.url)">read more</a></div><h2 class="flex-row" style="justify-content: center;color: white;margin-top:10px" v-cloak>{{carousel.date}}</h2></div></div></div><div class="swiper-pagination"></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div><main class="blog-main"><article v-for="post in posts" :key="post.id" :class="[post.blog_post,'flex-row']" style="flex-start"><div class="blog-main-img"><img width="300" height="auto" :src="post.img"></div><div class="blog-main-content"><p style="margin: 0px;font-size: 32px;cursor: pointer;" v-cloak @click.prevent="goToDetail(post.url)">{{post.title}}</p><p style="margin:20px 0px;color: #a1a1a1;font-style: italic;" v-cloak @click.prevent="goToDetail(post.url)">{{post.date}}</p><div class="blog-main-desc flex-row" style="align-items: center;"><p class="blog-main-logo" v-cloak>{{post.content_first}}</p><p class="blog-main-title" v-cloak>{{post.content}}</p></div><div><div class="read-more"><a :href="'javascript:void(0)'" @click.prevent="goToDetail(post.url)">read more</a></div></article></main></div><div id="pagination"><button v-if="currentPage > 1" @click="previousPage">Previous</button><button 118 v-for="page in totalPages" 119 :key="page" 120 :class="{active: page === currentPage}" 121 @click="goToPage(page)" 122 > 123 {{page}} 124 </button><button v-if="currentPage < totalPages" @click="nextPage">Next</button></div><!-- <div id="pagination"></div> --></div>
124<script> 125 new Vue({ 126 el: '#app', 127 data: { 128 //baseUrl:'http://192.168.16.236/rotita/', 129 baseUrl:'http://127.0.0.1/rotita/', 130 top_banner: { 131 banner_dialog_url: '', 132 location_url: '', 133 is_show:true 134 }, 135 carousels:[ 136 ], 137 swiper:{}, 138 catlist:[ 139 { 140 name:'Latest Posts', 141 id:'1', 142 }, 143 { 144 name:'Wedding Inspiration', 145 id:'2', 146 }, 147 { 148 name:'Real Weddings', 149 id:'3', 150 }, 151 { 152 name:'News', 153 id:'4', 154 }, 155 { 156 name:'Shop at AZAZIE', 157 id:'5', 158 }, 159 ], 160 posts: [ 161 { 162 id: 1, 163 sort: 1, 164 blog_post :'blog-post', 165 title: "A Guide to Choosing the Perfect Wedding Dress for Your Summer Wedding", 166 date: "Nicole Garcia / February 14, 2024 / 0 Comments", 167 content: "Itâs summertime, and love is in the air! Are you planning your dream wedding, but feeling overwhelmed about choosing the perfect wedding dress? Fear not, Azazie is always here to..." 168 }, 169 { 170 id: 2, 171 sort: 2, 172 blog_post: 'blog-post-normal', 173 title: "2023 Versatile Little White Dresses: The Perfect Bridal Shower Attire for Every Bride-to-Be", 174 date: "Nicole Garcia / February 14, 2024 / 0 Comments", 175 content: "Your bridal shower is a time to celebrate your upcoming nuptials in a way that truly feels like you. And what better way to do that than by embracing the..." 176 }, 177 { 178 id: 3, 179 sort:3, 180 blog_post: 'blog-post-normal', 181 title: "On-Trend Black Wedding Dresses: Shop the Look", 182 date: "Nicole Garcia / February 14, 2024 / 0 Comments", 183 content: "Black wedding dresses have become the latest trend in the wedding industry, and itâs not hard to see why. Black is a color associated with elegance, sophistication, and glamour. Itâs..." 184 } 185 ], 186 currentPage: 1, 187 currentCat:'2', 188 currentTag:0, 189 totalPages : 1, 190 params:{ 191 'blog_id':0 192 }, 193 }, 194 mounted() { 195 this.swiper=new Swiper('#swiper-container', { 196 loop: true, 197 pagination: { 198 el: '.swiper-pagination', 199 clickable: true, 200 }, 201 // 妿éè¦åè¿åéæé® 202 navigation: { 203 nextEl: '.swiper-button-next', 204 prevEl: '.swiper-button-prev', 205 }, 206 }); 207 if (window.location.href.includes("192.168.16.236")) { 208 this.baseUrl='http://192.168.16.236/rotita/'; 209 } 210 else if(window.location.href.includes("127.0.0.1")) 211 { 212 this.baseUrl='http://127.0.0.1/rotita/'; 213 } 214 else if(window.location.href.includes("localhost")) 215 { 216 this.baseUrl='http://localhost/rotita/'; 217 } 218 else { 219 this.baseUrl='https://www.rotita.com/'; 220 } 221 this.init(); 222 this.renderPagination(); 223 }, 224 watch: { 225 currentPage: function() { 226 this.renderPagination(); 227 }, 228 totalPages: function() { 229 this.renderPagination(); 230 }, 231 catlist(newCatList){ 232 this.$nextTick(() => { 233 this.swiper.update(); // æ´æ° Swiper å®ä¾ä»¥åæ æ°çæ°æ® 234 }); 235 } 236 }, 237 methods: { 238 formatDate(dateString) { 239 const date = new Date(dateString); 240 return date.toLocaleDateString("en-US", { 241 year: "numeric", 242 month: "long", 243 day: "numeric" 244 }); 245 }, 246 parseRewriteUrl() { 247 const url=this.extractPathFilename(window.location.href); 248 const rules = [ 249 { 250 pattern: /^blog\/$/, 251 params: {} 252 }, 253 { 254 pattern: /^blog\/tag\/(.*)\/cat\/([0-9]+)\/(.*)$/, 255 params: {tag_id: '$1', cat_id: '$2'} 256 }, 257 { 258 pattern: /^blog\/search\/(.*)\/$/, 259 params: {search: '$1'} 260 }, 261 { 262 pattern: /^blog\/tag\/(.*)\/$/, 263 params: {tag_id: '$1'} 264 }, 265 { 266 pattern: /^blog\/cat\/([0-9]+)\/$/, 267 params: {cat_id: '$1'} 268 }, 269 { 270 pattern: /^blog\/detail\/([0-9]+)\/$/, 271 params: {blog_id: '$1'} 272 } 273 ]; 274 275 276 let extractedParams = {}; 277 278 for (const rule of rules) { 279 if (rule.pattern.test(url)) { 280 const matches = url.match(rule.pattern); 281 extractedParams = this.extractParams(matches, rule.params); 282 break; 283 } 284 } 285 286 return extractedParams; 287 }, 288 extractPathFilename(url) { 289 return url.replace(this.baseUrl,''); 290 }, 291 extractParams(matches, params) { 292 const extractedParams = {}; 293 294 for (const key in params) { 295 if (params.hasOwnProperty(key)) { 296 const paramName = params[key]; 297 const paramValue = typeof paramName === 'string' ? matches[parseInt(paramName.slice(1))] : undefined; 298 extractedParams[key] = paramValue; 299 } 300 } 301 302 return extractedParams; 303 }, 304 renderPagination() { 305 // var paginationContainer = $('#pagination'); 306 // paginationContainer.empty(); 307 308 // æ·»å ä¸ä¸é¡µæé® 309 // if (this.currentPage > 1) { 310 // paginationContainer.append('<button @click="previousPage">Previous</button>'); 311 // } 312 313 // // æ·»å é¡µç æé® 314 // for (var i = 1; i <= this.totalPages; i++) { 315 // if (i === this.currentPage) { 316 // paginationContainer.append('<button class="active" @click="goToPage(' + i + ')">' + i + '</button>'); 317 // } else { 318 // paginationContainer.append('<button @click="goToPage(' + i + ')">' + i + '</button>'); 319 // } 320 // } 321 322 // // æ·»å ä¸ä¸é¡µæé® 323 // if (this.currentPage < this.totalPages) { 324 // paginationContainer.append('<button @click="nextPage">Next</button>'); 325 // } 326 this.goToPage(this.currentPage); 327 }, 328 previousPage() { 329 if (this.currentPage > 1) { 330 this.currentPage--; 331 this.renderPagination(); 332 // å¤ç页ç ååçé»è¾ 333 console.log('Page changed to: ' + this.currentPage); 334 } 335 }, 336 nextPage() { 337 if (this.currentPage < this.totalPages) { 338 this.currentPage++; 339 this.renderPagination(currentPage); 340 // å¤ç页ç ååçé»è¾ 341 console.log('Page changed to: ' + this.currentPage); 342 } 343 }, 344 goToDetail(url) 345 { 346 window.location.href=this.baseUrl+"blog/"+url; 347 }, 348 chooseCat(cat_id) 349 {
350 $('.blog-nav-ul li a.choose').removeClass('choose'); 351 this.currentCat=cat_id; 352 $("#cat_"+this.currentCat).addClass('choose'); 353 if(cat_id=='8') 354 { 355 window.location.href=this.baseUrl; 356 } 357 else 358 { 359 window.location.href=this.baseUrl+"blog/cat/"+cat_id+"/"; 360 } 361 // this.goToPage(1); 362 }, 363 goToPage(page) { 364 this.currentPage = page; 365 // this.renderPagination(); 366 // å¤ç页ç ååçé»è¾ 367 //window.location.href=""; 368 console.log('Page changed to: ' + this.currentPage); 369 $.ajax({ 370 url: this.baseUrl+'blog.php', 371 method: 'POST', 372 dataType: 'json', 373 data: {"page":page,'act':'getList','cat_id':this.currentCat,'tag_id':this.params.tag_id,'search':this.params.search}, 374 success: (response) => { 375 // alert(1); 376 this.posts = response.res; 377 this.totalPages=response.total_page; 378 $('.blog-nav-ul li a.choose').removeClass('choose'); 379 this.currentCat=response.cat_id; 380 $("#cat_"+this.currentCat).addClass('choose'); 381 }, 382 error: (xhr, status, error) => { 383 console.error('Request failed. Status:', status); 384 } 385 }); 386 }, 387 init() 388 { 389 this.params=this.parseRewriteUrl(); 390 if(this.params.cat_id>0)this.currentCat=this.params.cat_id; 391 $('.blog-nav-ul li a.choose').removeClass('choose'); 392 // $("#cat_"+this.currentCat).addClass('choose'); 393 $.ajax({
394 url: this.baseUrl+'blog.php', 395 method: 'GET', 396 dataType: 'json', 397 data: {'act':'init','cat_id':this.currentCat,'tag_id':this.params.tag_id}, 398 success: (response) => { 399 var res = response; 400 if(res.error_code==0) 401 { 402 this.top_banner = res.res.top_banner; 403 if(this.top_banner.banner_dialog_url) $('.entry-header img').show(); 404 this.carousels = res.res.banner_list; 405 this.catlist = res.res.cat_list; 406 } 407 $("#cat_"+this.currentCat).addClass('choose'); 408 }, 409 error: (xhr, status, error) => { 410 console.error('Request failed. Status:', status); 411 } 412 }); 413 } 414 } 415 }); 416 </script>
416</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.