PageSourceSearch

https://www.rotita.com/blog/

html rotita.com collected 2026-09-24 10:18:36 UTC 18,405 bytes, 416 lines download raw bytes

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.