templates/app/photo.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}
  3.     {{ photo.influencer.name|title }}
  4.     Nude Photo #{{ photo.id }}
  5.     - Share-Nude
  6. {% endblock %}
  7. {% block description %}Nude photo #{{ photo.id }}
  8.     of
  9.     {{ photo.influencer.name|title }}
  10.     posted
  11.     {% if photo.user.username != 'Admin' %}by
  12.         {{ photo.user.username }}
  13.     {% endif %}on Share-Nude on
  14.     {{ photo.createdAt|date('Y-m-d') }}. More nudes of
  15.     {{ photo.influencer.name|title }}
  16.     Onlyfans on Share-Nude
  17. {% endblock %}
  18. {% block meta %}
  19.     <meta content="{{ photo.influencer.name|title }} Nude Photo #{{ photo.id }}" property="og:title"/>
  20.     <meta content="Share-Nude" property="og:site_name"/>
  21.     <meta content="en_EN" property="og:locale"/>
  22.     <meta content="article" property="og:type"/>
  23.     <meta content="https://share-nude.com{{ app.request.requestUri }}" property="og:url"/>
  24.     <meta content="https://share-nude.com{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/' ~ (photo.webp ?? photo.slug)) }}" property="og:image"/>
  25.     <meta content="image/{{ photo.webp is not null ? 'webp' : 'jpeg' }}" property="og:image:type"/>
  26.     <meta content="Nude photo #{{ photo.id }} of {{ photo.influencer.name|title }}{% if photo.user.username != 'Admin' %} posted by {{ photo.user.username }}{% endif %} on Share-Nude. More nudes of {{ photo.influencer.name|title }} on Share-Nude" property="og:description"/>
  27.     <link rel="canonical" href="{{sharenude|raw}}/p/{{ photo.influencer.slug }}/{{ photo.id }}"/>
  28.     {# Twitter Card #}
  29.     <meta name="twitter:card" content="summary_large_image"/>
  30.     <meta name="twitter:title" content="{{ photo.influencer.name|title }} Nude Photo #{{ photo.id }}"/>
  31.     <meta name="twitter:description" content="Nude photo #{{ photo.id }} of {{ photo.influencer.name|title }} on Share-Nude"/>
  32.     <meta name="twitter:image" content="https://share-nude.com{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/' ~ (photo.webp ?? photo.slug)) }}"/>
  33.     
  34.     {# Schema.org JSON-LD - ImageObject #}
  35.     <script type="application/ld+json">
  36.     {
  37.         "@context": "https://schema.org",
  38.         "@type": "ImageObject",
  39.         "name": "{{ photo.influencer.name|title }} Nude Photo #{{ photo.id }}",
  40.         "description": "Nude photo of {{ photo.influencer.name|title }}{% if photo.influencer.onlyfans|length > 0 %} ({{ photo.influencer.onlyfans }} OnlyFans){% endif %}{% if photo.influencer.mym|length > 0 %} ({{ photo.influencer.mym }} MYM){% endif %} posted on Share-Nude",
  41.         "contentUrl": "{{sharenude|raw}}{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/' ~ (photo.webp ?? photo.slug)) }}",
  42.         "thumbnailUrl": "{{sharenude|raw}}{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/306/' ~ (photo.webp ?? photo.slug)) }}",
  43.         "url": "{{sharenude|raw}}/p/{{ photo.influencer.slug }}/{{ photo.id }}",
  44.         "datePublished": "{{ photo.createdAt|date('c') }}",
  45.         "uploadDate": "{{ photo.createdAt|date('c') }}",
  46.         "author": {
  47.             "@type": "Person",
  48.             "name": "{{ photo.influencer.name|title }}",
  49.             "url": "{{sharenude|raw}}/i/{{ photo.influencer.slug }}"
  50.         },
  51.         "publisher": {
  52.             "@type": "Organization",
  53.             "name": "Share-Nude",
  54.             "url": "{{sharenude|raw}}",
  55.             "logo": {
  56.                 "@type": "ImageObject",
  57.                 "url": "{{sharenude|raw}}{{ asset('sharenude.png') }}"
  58.             } 
  59.         },
  60.         "interactionStatistic": {
  61.             "@type": "InteractionCounter",
  62.             "interactionType": "https://schema.org/ViewAction",
  63.             "userInteractionCount": {{ photo.views }}
  64.         },
  65.         "isPartOf": {
  66.             "@type": "ImageGallery",
  67.             "name": "{{ photo.influencer.name|title }} Photos",
  68.             "url": "{{sharenude|raw}}/i/{{ photo.influencer.slug }}"
  69.         },
  70.         "commentCount": {{ comments|length }},
  71.         "comment": [
  72.             {% for c in comments|slice(0, 10) %}
  73.             {
  74.                 "@type": "Comment",
  75.                 "author": {"@type": "Person", "name": "{{ c.user.username|e('js') }}"},
  76.                 "dateCreated": "{{ c.createdAt|date('c') }}",
  77.                 "text": "{{ c.comment|e('js') }}"
  78.             }{% if not loop.last %},{% endif %}
  79.             {% endfor %}
  80.         ]
  81.     }
  82.     </script>
  83.     
  84.     {# BreadcrumbList for navigation #}
  85.     <script type="application/ld+json">
  86.     {
  87.         "@context": "https://schema.org",
  88.         "@type": "BreadcrumbList",
  89.         "itemListElement": [
  90.             {
  91.                 "@type": "ListItem",
  92.                 "position": 1,
  93.                 "name": "Home",
  94.                 "item": "{{sharenude|raw}}"
  95.             },
  96.             {
  97.                 "@type": "ListItem",
  98.                 "position": 2,
  99.                 "name": "{{ photo.influencer.name|title }}",
  100.                 "item": "{{sharenude|raw}}/i/{{ photo.influencer.slug }}"
  101.             },
  102.             {
  103.                 "@type": "ListItem",
  104.                 "position": 3,
  105.                 "name": "Photo #{{ photo.id }}",
  106.                 "item": "{{sharenude|raw}}/p/{{ photo.influencer.slug }}/{{ photo.id }}"
  107.             }
  108.         ]
  109.     }
  110.     </script>
  111. {% endblock %}
  112. {% block body %}
  113.     <div class="container" id="photos-page-js">
  114.         {% set breadcrumbs = [
  115.             {'label': photo.influencer.name|title, 'url': path('app_influencer', {'slug': photo.influencer.slug})},
  116.             {'label': 'Photo #' ~ photo.id, 'url': path('user_photo', {'slug': photo.influencer.slug, 'id': photo.id})}
  117.         ] %}
  118.         {{ include('partials/breadcrumb.html.twig') }}
  119.         <div class="row">
  120.             <div class="col-lg-12 mx-auto my-3 text-center white">
  121.                 <h1>{{ photo.influencer.name|title }}
  122.                     Nude Photo #{{ photo.id }}</h1>
  123.                 {{ include ('flash.html.twig') }}
  124.                 <div class="mb-3">
  125.                     {% if previous is not null %}
  126.                         <a href="{{ path('user_photo', {'slug':previous.influencer.slug, 'id':previous.id}) }}" title="{{ photo.influencer.name|title }} Previous Photo">
  127.                             <i class="fa-solid fa-arrow-left"></i>
  128.                             Previous</a>
  129.                     {% endif %}
  130.                     {% if previous is not null and next is not null %}|
  131.                     {% endif %}
  132.                     {% if next is not null %}
  133.                         <a href="{{ path('user_photo', {'slug':next.influencer.slug, 'id':next.id}) }}" title="{{ photo.influencer.name|title }} Next Photo">Next
  134.                             <i class="fa-solid fa-arrow-right"></i>
  135.                         </a>
  136.                     {% endif %}
  137.                 </div>
  138.                 <!-- VIP Promo Banner -->
  139.                 <div class="vip-promo-alert">
  140.                     <a href="https://share-nude-vip.com" target="_blank" rel="noopener nofollow" class="vip-promo-link">
  141.                         <span class="vip-icon">🌟</span>
  142.                         <span class="vip-text">Share-Nude VIP - Toutes les photos exclusives sans pub pour seulement 1€</span>
  143.                         <span class="vip-arrow">→</span>
  144.                     </a>
  145.                 </div>
  146.                 {% if photo.webpLarge is not null %}
  147.                     <a href="{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/' ~ photo.slug ~ '') }}" target="_blank" rel="nofollow" title="Fullscreen photo" data-no-swup>
  148.                     {% else %}
  149.                         <a href="{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/' ~ photo.webp ~ '') }}" target="_blank" rel="nofollow" title="Fullscreen photo" data-no-swup>
  150.                         {% endif %}
  151.                         <picture>
  152.                             {% if photo.webp is not null %}<source srcset="{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/700/' ~ photo.webp ~ '') }}" type="image/webp">
  153.                             {% endif %}
  154.                             <img class="mb-3 mw-100" src="{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/700/' ~ photo.slug ~ '') }}" title="{{ photo.influencer.name|title }}" alt="{{ photo.influencer.name|title }}"/>
  155.                         </picture>
  156.                     </a>
  157.                     {{ include('ads.html.twig') }}
  158.                         
  159.                     {% if app.user == photo.user or is_granted('ROLE_ADMIN') %}
  160.                     <p>
  161.                         <a href="{{ path('user_edit_photo', {id:photo.id}) }}" class="btn btn-secondary">Edit</a>
  162.                         <a href="{{ path('user_remove_photo', {id:photo.id}) }}" onclick="return confirm('Are you sure you want to delete this photo ?');" class="btn btn-danger">Delete</a>
  163.                     </p>
  164.                     {% endif %}
  165.                         
  166.                     <p class="text-muted">Posted
  167.                         {{ photo.createdAt|ago }}
  168.                         {% if photo.user.username != 'Admin' and photo.user.ip is not null %}by
  169.                             <a href="{{ path('user_user', {username: photo.user.username}) }}">{{ photo.user.username }}</a>
  170.                         {% endif %}<br>{{ photo.views|number_format }}
  171.                         <i class="fa-solid fa-eye"></i>
  172.                     </p>
  173.                     <p>To see more photo of
  174.                         {{ photo.influencer.name }}
  175.                         {% if photo.influencer.onlyfans|length > 0 %}
  176.                             /
  177.                             {{ photo.influencer.onlyfans }}
  178.                             Onlyfans
  179.                         {% endif %}
  180.                         {% if photo.influencer.mym|length > 0 %}
  181.                             /
  182.                             {{ photo.influencer.mym }}
  183.                             MyM
  184.                         {% endif %}, click on the image bellow</p>
  185.                     <a href="{{path('app_influencer', {slug:photo.influencer.slug})}}" title="More {{ photo.influencer.name|title }} photos and videos">
  186.                         {% if photo.influencer.mainPhoto is not null %}
  187.                             <picture>
  188.                                 {% if photo.influencer.mainPhoto.webp is not null %}<source srcset="{{sharenude|raw}}{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/196/' ~ photo.influencer.mainPhoto.webp ~ '') }}" type="image/webp">
  189.                                 {% endif %}
  190.                                 <img loading="lazy" src="{{sharenude|raw}}{{ asset('images/influencer/' ~ photo.influencer.slug ~ '/196/' ~ photo.influencer.mainPhoto.slug ~ '') }}" class="rounded-circle" title="{{ photo.influencer.name|title }} photo" alt="{{ photo.influencer.name|title }} photo"/>
  191.                             </picture>
  192.                         {% else %}
  193.                             <picture>
  194.                                 <source srcset="{{ asset('images/generic-avatar.webp') }}" type="image/webp">
  195.                                 <img class="rounded-circle" src="{{ asset('images/generic-avatar.jpg') }}" width="96" height="96" title="{{ photo.influencer.name|title }}" alt="{{ photo.influencer.name|title }}"/>
  196.                             </picture>
  197.                         {% endif %}
  198.                     </a>
  199.                     <p class="text-muted mt-4">
  200.                         Is this "{{ photo.influencer.name|title }}" photo yours and was shared without your consent?
  201.                         <a href="mailto:[email protected]?subject=[DMCA on Share-Nude] Unauthorized Content Removal Request - {{ photo.influencer.name|title }} &body=Url : {{sharenude|raw}}    /p/{{ photo.influencer.slug }}/{{ photo.id }}%0D%0APlease provide details about the content in question">
  202.                             <br>
  203.                             <button class="btn btn-sm btn-outline-danger">
  204.                                 Click here to reach out to us for removal.</button>
  205.                         </a>
  206.                         <br>
  207.                         Photo will be deleted within fews days.
  208.                     </p>
  209.                     {{ include('comments.html.twig') }}
  210.                 </div>
  211.             </div>
  212.             <div class="row" id="photo-container">
  213.                 <h2>More nudes photos of
  214.                     {{ photo.influencer.name|title }}</h2>
  215.                 <div id="load-more-button" class="d-none" data-url="{{ path('load_more_photos', { 'page': 0, 'sort': app.request.query.get('sort'), 'direction': app.request.query.get('direction'), 'influencer': photo.influencer.id, 'photo': photo.id }) }}">Load more photos</div>
  216.                 <div id="total-page" class="d-none" data-page="{{totalPages}}"></div>
  217.                 {% for photo in photos %}
  218.                     {{ include('grid_photos.html.twig') }}
  219.                 {% endfor %}
  220.             </div>
  221.             <div class="row">
  222.                 {{ include('loader.html.twig') }}
  223.                 <div class="container">
  224.                     <div class="navigation mt-2 mb-4" id="pagination-container d-none">
  225.                         {# {{ knp_pagination_render(photos) }} #}
  226.                     </div>
  227.                 </div>
  228.             </div>
  229.         </div>
  230.     {% endblock %}
  231.     {% block javascripts %}{% endblock %}