feat: add Google Reviews educational guide at /edukacja/opinie-google

Personalized guide with GBP links (write review, view profile, photos)
for each member's company. Includes tips on collecting reviews,
responding to feedback, Local Guides program, and Google policies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-03-13 12:04:20 +01:00
parent f960a4cf0d
commit 700382b55d
3 changed files with 697 additions and 2 deletions

View File

@ -5,8 +5,8 @@ Education Routes
Platforma Edukacyjna - materiały szkoleniowe dla członków Norda Biznes. Platforma Edukacyjna - materiały szkoleniowe dla członków Norda Biznes.
""" """
from flask import render_template from flask import render_template, url_for
from flask_login import login_required from flask_login import login_required, current_user
from . import bp from . import bp
@ -25,6 +25,15 @@ def index():
'status': 'available', 'status': 'available',
'video_url': 'videos/nordabiz-zajawka-final.mp4' 'video_url': 'videos/nordabiz-zajawka-final.mp4'
}, },
{
'id': 2,
'title': 'Opinie Google - jak budować reputację firmy',
'description': 'Praktyczny poradnik o opiniach w Google. Dowiedz się, jak zachęcać klientów do wystawiania opinii i jak odpowiadać na recenzje.',
'type': 'guide',
'duration': '12 min czytania',
'status': 'available',
'url': 'education.google_reviews_guide'
},
{ {
'id': 3, 'id': 3,
'title': 'Skuteczny networking w Izbie', 'title': 'Skuteczny networking w Izbie',
@ -44,3 +53,40 @@ def index():
] ]
return render_template('education/index.html', materials=materials) return render_template('education/index.html', materials=materials)
@bp.route('/opinie-google', endpoint='google_reviews_guide')
@login_required
def google_reviews_guide():
"""Poradnik o opiniach Google dla członków Izby."""
from database import db, CompanyWebsiteAnalysis, Company
# Get GBP data for the current user's company
gbp_data = None
company = None
if current_user.company_id:
company = db.session.get(Company, current_user.company_id)
if company:
analysis = (
db.session.query(CompanyWebsiteAnalysis)
.filter_by(company_id=company.id)
.order_by(CompanyWebsiteAnalysis.analyzed_at.desc())
.first()
)
if analysis and analysis.google_place_id:
links = analysis.google_maps_links or {}
gbp_data = {
'company_name': company.name,
'google_name': analysis.google_name,
'rating': float(analysis.google_rating) if analysis.google_rating else None,
'reviews_count': analysis.google_reviews_count or 0,
'photos_count': analysis.google_photos_count or 0,
'write_review_url': links.get('writeAReviewUri'),
'reviews_url': links.get('reviewsUri'),
'place_url': links.get('placeUri'),
'photos_url': links.get('photosUri'),
'google_maps_url': analysis.google_maps_url,
}
return render_template('education/google_reviews_guide.html',
gbp_data=gbp_data, company=company)

View File

@ -0,0 +1,647 @@
{% extends "base.html" %}
{% block title %}Opinie Google - Poradnik | Norda Biznes Partner{% endblock %}
{% block extra_css %}
<style>
.guide-header {
margin-bottom: var(--spacing-xl);
}
.guide-header h1 {
font-size: var(--font-size-3xl);
color: var(--text-primary);
margin-bottom: var(--spacing-sm);
}
.guide-header .breadcrumb {
color: var(--text-muted);
font-size: var(--font-size-sm);
margin-bottom: var(--spacing-md);
}
.guide-header .breadcrumb a {
color: var(--primary);
text-decoration: none;
}
.guide-header .breadcrumb a:hover {
text-decoration: underline;
}
.guide-layout {
display: grid;
grid-template-columns: 1fr 320px;
gap: var(--spacing-xl);
align-items: start;
}
@media (max-width: 768px) {
.guide-layout {
grid-template-columns: 1fr;
}
}
.guide-content {
background: white;
border-radius: var(--radius-lg);
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
padding: var(--spacing-xl);
}
.guide-content h2 {
font-size: var(--font-size-xl);
color: var(--text-primary);
margin-top: var(--spacing-xl);
margin-bottom: var(--spacing-md);
padding-bottom: var(--spacing-sm);
border-bottom: 2px solid #e5e7eb;
}
.guide-content h2:first-child {
margin-top: 0;
}
.guide-content h3 {
font-size: var(--font-size-lg);
color: var(--text-primary);
margin-top: var(--spacing-lg);
margin-bottom: var(--spacing-sm);
}
.guide-content p {
color: var(--text-secondary);
line-height: 1.7;
margin-bottom: var(--spacing-md);
}
.guide-content ul, .guide-content ol {
color: var(--text-secondary);
line-height: 1.7;
margin-bottom: var(--spacing-md);
padding-left: var(--spacing-lg);
}
.guide-content li {
margin-bottom: var(--spacing-xs);
}
.tip-box {
background: linear-gradient(135deg, #dbeafe 0%, #eff6ff 100%);
border: 1px solid #93c5fd;
border-radius: var(--radius);
padding: var(--spacing-md);
margin: var(--spacing-md) 0;
}
.tip-box strong {
color: #1e40af;
}
.tip-box p {
color: #1e3a5f;
margin-bottom: 0;
}
.warning-box {
background: linear-gradient(135deg, #fef3c7 0%, #fffbeb 100%);
border: 1px solid #fbbf24;
border-radius: var(--radius);
padding: var(--spacing-md);
margin: var(--spacing-md) 0;
}
.warning-box strong {
color: #92400e;
}
.warning-box p {
color: #78350f;
margin-bottom: 0;
}
.example-box {
background: #f0fdf4;
border: 1px solid #86efac;
border-radius: var(--radius);
padding: var(--spacing-md);
margin: var(--spacing-md) 0;
}
.example-box strong {
color: #166534;
}
.example-box p, .example-box em {
color: #15803d;
margin-bottom: 0;
}
.bad-example-box {
background: #fef2f2;
border: 1px solid #fca5a5;
border-radius: var(--radius);
padding: var(--spacing-md);
margin: var(--spacing-md) 0;
}
.bad-example-box strong {
color: #991b1b;
}
.bad-example-box p, .bad-example-box em {
color: #b91c1c;
margin-bottom: 0;
}
/* Sidebar */
.guide-sidebar {
position: sticky;
top: 80px;
}
.company-gbp-card {
background: white;
border-radius: var(--radius-lg);
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
padding: var(--spacing-lg);
margin-bottom: var(--spacing-lg);
}
.company-gbp-card h3 {
font-size: var(--font-size-md);
color: var(--text-primary);
margin-bottom: var(--spacing-md);
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.gbp-stat {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--spacing-sm) 0;
border-bottom: 1px solid #f3f4f6;
}
.gbp-stat:last-child {
border-bottom: none;
}
.gbp-stat-label {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.gbp-stat-value {
font-weight: 600;
color: var(--text-primary);
}
.gbp-stars {
color: #f59e0b;
font-size: var(--font-size-lg);
}
.gbp-actions {
margin-top: var(--spacing-md);
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
}
.gbp-action-btn {
display: flex;
align-items: center;
gap: var(--spacing-sm);
padding: 10px var(--spacing-md);
border-radius: var(--radius);
text-decoration: none;
font-size: var(--font-size-sm);
font-weight: 500;
transition: all 0.2s;
}
.gbp-action-btn.primary {
background: #4285f4;
color: white;
}
.gbp-action-btn.primary:hover {
background: #3367d6;
}
.gbp-action-btn.secondary {
background: #f3f4f6;
color: var(--text-primary);
}
.gbp-action-btn.secondary:hover {
background: #e5e7eb;
}
.gbp-action-btn svg {
width: 16px;
height: 16px;
flex-shrink: 0;
}
.toc-card {
background: white;
border-radius: var(--radius-lg);
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
padding: var(--spacing-lg);
}
.toc-card h3 {
font-size: var(--font-size-md);
color: var(--text-primary);
margin-bottom: var(--spacing-md);
}
.toc-card a {
display: block;
color: var(--text-secondary);
text-decoration: none;
font-size: var(--font-size-sm);
padding: 6px 0;
border-bottom: 1px solid #f9fafb;
}
.toc-card a:hover {
color: var(--primary);
}
.no-gbp-card {
background: linear-gradient(135deg, #fef3c7 0%, #fffbeb 100%);
border: 1px solid #fbbf24;
border-radius: var(--radius-lg);
padding: var(--spacing-lg);
margin-bottom: var(--spacing-lg);
}
.no-gbp-card h3 {
color: #92400e;
margin-bottom: var(--spacing-sm);
}
.no-gbp-card p {
color: #78350f;
font-size: var(--font-size-sm);
margin-bottom: 0;
}
.review-checklist {
list-style: none;
padding: 0;
}
.review-checklist li {
padding: var(--spacing-sm) 0;
padding-left: 28px;
position: relative;
}
.review-checklist li::before {
content: '\2713';
position: absolute;
left: 0;
color: #22c55e;
font-weight: 700;
}
</style>
{% endblock %}
{% block content %}
<div class="guide-header">
<div class="breadcrumb">
<a href="{{ url_for('education.education_index') }}">Platforma Edukacyjna</a> &raquo; Opinie Google
</div>
<h1>Opinie Google - jak budowac reputacje firmy</h1>
</div>
<div class="guide-layout">
<div class="guide-content">
<h2 id="dlaczego">Dlaczego opinie sa wazne?</h2>
<p>
Opinie w Google to jeden z najwazniejszych czynnikow, ktore wplywaja na to, czy potencjalny klient
wybierze Twoja firme. <strong>93% konsumentow</strong> czyta opinie online przed podjeciem decyzji zakupowej,
a firmy z ocena powyzej 4.0 generuja nawet <strong>270% wiecej zapytan</strong> niz te z nizsza nota.
</p>
<p>
Dla czlonkow Izby Norda Biznes opinie sa szczegolnie wazne &mdash; buduja zaufanie nie tylko wsrod klientow
indywidualnych, ale takze wsrod potencjalnych partnerow biznesowych szukajacych wykonawcow i podwykonawcow
w regionie.
</p>
<div class="tip-box">
<strong>Czy wiesz?</strong>
<p>
Google bierze pod uwage opinie przy ustalaniu pozycji w wynikach wyszukiwania.
Firmy z wieksza liczba pozytywnych opinii pojawiaja sie wyzej w Mapach Google
i w tzw. &bdquo;local pack&rdquo; (3 wyniki z mapa na gorze strony wyszukiwania).
</p>
</div>
<h2 id="jak-zbierac">Jak zachecac klientow do wystawiania opinii?</h2>
<h3>1. Poprosto &mdash; po zakonczeniu uslugi</h3>
<p>
Najlepszy moment na prosbe o opinie to chwila, gdy klient jest zadowolony z uslugi.
Wyslij krotka wiadomosc SMS lub e-mail z bezposrednim linkiem do wystawienia opinii.
</p>
{% if gbp_data and gbp_data.write_review_url %}
<div class="tip-box">
<strong>Twoj link do zbierania opinii:</strong>
<p style="margin-top: 8px;">
<a href="{{ gbp_data.write_review_url }}" target="_blank" rel="noopener"
style="color: #2563eb; word-break: break-all;">{{ gbp_data.write_review_url }}</a>
</p>
<p style="margin-top: 8px;">
Skopiuj ten link i wyslij klientom po zakonczeniu uslugi. Klikniecie przeniesie ich
bezposrednio do formularza wystawiania opinii.
</p>
</div>
{% endif %}
<h3>2. Ulatw proces</h3>
<p>
Im mniej krokow, tym wiecej opinii. Kilka sprawdzonych sposobow:
</p>
<ul>
<li><strong>Link na stronie www</strong> &mdash; dodaj przycisk &bdquo;Wystaw opinie&rdquo; na swojej stronie</li>
<li><strong>Kod QR</strong> &mdash; wydrukuj kod QR z linkiem i umiesc go w recepcji, na paragonie lub wizytowce</li>
<li><strong>Podpis e-mail</strong> &mdash; dodaj link do opinii w stopce swoich maili</li>
<li><strong>Media spolecznosdciowe</strong> &mdash; udostepnij link na Facebooku lub Instagramie</li>
</ul>
<h3>3. Nie kupuj opinii</h3>
<div class="warning-box">
<strong>Uwaga!</strong>
<p>
Google aktywnie wykrywa i usuwa falszywe opinie. Za kupowanie opinii Twoja wizytowka moze zostac
zablokowana lub usuniety z wynikow. Opinie powinny pochodzic od prawdziwych klientow, ktorzy
naprawde skorzystali z Twoich uslug.
</p>
</div>
<h2 id="dobra-opinia">Jak wyglada dobra opinia?</h2>
<p>
Nie kazda opinia ma taka sama wartosc. Google i potencjalni klienci szczegolnie cenia opinie, ktore:
</p>
<ul class="review-checklist">
<li>Sa napisane wlasnymi slowami (nie skopiowane)</li>
<li>Opisuja konkretne doswiadczenie (&bdquo;Pan Kowalski naprawil dach w 3 dni&rdquo;)</li>
<li>Zawieraja zdjecia wykonanej pracy lub produktu</li>
<li>Wymieniaja imie osoby, ktora obslugiwala (jezeli to stosowne)</li>
<li>Sa aktualne &mdash; Google premiuje swiezsze opinie</li>
</ul>
<div class="example-box">
<strong>Dobry przyklad opinii:</strong>
<p style="margin-top: 8px;"><em>
&bdquo;Zlecilismy firmie XYZ remont dachu na budynku biurowym. Pan Marek i jego ekipa pracowali
sprawnie, dotrzymali terminu i dokladnie posprzatali po zakonczeniu pracy. Cena zgodna z oferta,
bez niespodzianek. Polecam kazdemu, kto szuka rzetelnego wykonawcy w regionie.&rdquo;
</em></p>
</div>
<div class="bad-example-box">
<strong>Slaby przyklad opinii:</strong>
<p style="margin-top: 8px;"><em>&bdquo;Polecam&rdquo;</em> (zbyt krotka, nie wnosi informacji)</p>
</div>
<h2 id="odpowiadanie">Jak odpowiadac na opinie?</h2>
<p>
Odpowiadanie na opinie to rownie wazne jak ich zbieranie. Pokazuje, ze cenisz zdanie klientow
i aktywnie zarzadzasz swoja reputacja.
</p>
<h3>Odpowiedz na pozytywna opinie</h3>
<ul>
<li>Podziekuj z uzyciem imienia klienta</li>
<li>Nawiaz do konkretnego elementu opinii</li>
<li>Zachec do ponownego skorzystania z uslug</li>
</ul>
<div class="example-box">
<strong>Przyklad odpowiedzi:</strong>
<p style="margin-top: 8px;"><em>
&bdquo;Dziekuje za mile slowa, Panie Andrzeju! Ciesze sie, ze remont dachu przebiegl
sprawnie. W razie potrzeby zapraszamy ponownie. Pozdrawiam &mdash; Marek, XYZ Dachy&rdquo;
</em></p>
</div>
<h3>Odpowiedz na negatywna opinie</h3>
<ul>
<li><strong>Zachowaj spokoj</strong> &mdash; nigdy nie odpowiadaj emocjonalnie</li>
<li><strong>Przepros</strong> za bledne doswiadczenie (nawet jezeli sie nie zgadzasz)</li>
<li><strong>Zaproponuj rozwiazanie</strong> &mdash; przeniesc rozmowe offline (telefon, e-mail)</li>
<li><strong>Odpowiedz szybko</strong> &mdash; najlepiej w ciagu 24-48 godzin</li>
</ul>
<div class="warning-box">
<strong>Czego nie robic:</strong>
<p>
Nie atakuj autora opinii, nie ujawniaj danych osobowych, nie oferuj rabatow za zmiane opinii.
Profesjonalna, spokojna odpowiedz buduje wiecej zaufania niz sam fakt negatywnej recenzji.
</p>
</div>
{% if gbp_data and gbp_data.reviews_url %}
<div class="tip-box">
<strong>Sprawdz i odpowiedz na opinie swojej firmy:</strong>
<p style="margin-top: 8px;">
<a href="{{ gbp_data.reviews_url }}" target="_blank" rel="noopener"
style="color: #2563eb;">Przejdz do opinii {{ gbp_data.google_name or gbp_data.company_name }}</a>
</p>
</div>
{% endif %}
<h2 id="zdjecia">Zdjecia w profilu Google</h2>
<p>
Firmy ze zdjeciami otrzymuja <strong>42% wiecej zapytan o trasie</strong> w Mapach Google
i <strong>35% wiecej klikniec</strong> w strone internetowa. Warto zadbac o:
</p>
<ul>
<li><strong>Zdjecie profilowe</strong> &mdash; logo firmy w dobrej jakosci</li>
<li><strong>Zdjecie w tle</strong> &mdash; siedziba, front budynku, zespol</li>
<li><strong>Zdjecia uslug/produktow</strong> &mdash; efekty pracy, realizacje</li>
<li><strong>Zdjecia wnetrza</strong> &mdash; biuro, zaklad, salon (jezeli przyjmujesz klientow)</li>
</ul>
<div class="tip-box">
<strong>Wskazowka:</strong>
<p>
Regularnie dodawaj nowe zdjecia (np. raz w miesiacu). Google premiuje aktywne profile.
Klienci tez moga dodawac zdjecia &mdash; warto ich do tego zachecac.
</p>
</div>
{% if gbp_data and gbp_data.photos_url %}
<div class="tip-box">
<strong>Zarzadzaj zdjeciami swojej firmy:</strong>
<p style="margin-top: 8px;">
<a href="{{ gbp_data.photos_url }}" target="_blank" rel="noopener"
style="color: #2563eb;">Przejdz do zdjec {{ gbp_data.google_name or gbp_data.company_name }}</a>
</p>
</div>
{% endif %}
<h2 id="local-guide">Program Google Local Guides</h2>
<p>
Google Local Guides to program lojalnoscowy Google. Kazdy uzytkownik Google moze zostac
Local Guide &mdash; wystarczy wystawiac opinie, dodawac zdjecia i uzupelniac informacje o miejscach.
</p>
<p>Za aktywnosc zbierasz punkty i awansujesz na kolejne poziomy (1-10):</p>
<ul>
<li><strong>Opinia</strong> &mdash; 10 pkt (z tekstem ponad 200 znakow: 20 pkt)</li>
<li><strong>Ocena (same gwiazdki)</strong> &mdash; 1 pkt</li>
<li><strong>Zdjecie</strong> &mdash; 5 pkt</li>
<li><strong>Film</strong> &mdash; 7 pkt</li>
<li><strong>Odpowiedz na pytanie</strong> &mdash; 3 pkt</li>
</ul>
<div class="tip-box">
<strong>Dlaczego to wazne dla Twojej firmy?</strong>
<p>
Opinie od Local Guides z wyzszym poziomem maja wieksza wiarygodnosc w algorytmie Google.
Zachecaj swoich staleych klientow do zalozenia konta Local Guide &mdash; ich opinie beda wazniejsze.
</p>
</div>
<h2 id="zasady-google">Zasady Google dotyczace opinii</h2>
<p>
Google ma jasne zasady dotyczace tego, jakie opinie sa dozwolone. Znajomosc tych zasad
pomoze Ci zarowno zbierac opinie legalnie, jak i zglaszac te falszywe.
</p>
<h3>Zabronione tresci</h3>
<ul>
<li>Spam i falszywe opinie (kupione, wymuszone, od pracownikow)</li>
<li>Tresci obraZliwe, nienawistne lub dyskryminujace</li>
<li>Reklamy i promocje w opiniach</li>
<li>Opinie dotyczace konkurencji (a nie miejsca, ktore sie ocenia)</li>
<li>Konflikty interesow (opinie od wlascicieli i pracownikow)</li>
</ul>
<h3>Jak zglosic falszywa opinie?</h3>
<ol>
<li>Wejdz na swoj profil firmy w Google</li>
<li>Znajdz opinie, ktora chcesz zglosic</li>
<li>Kliknij trzy kropki (&hellip;) obok opinii</li>
<li>Wybierz &bdquo;Zglos jako nieodpowiednia&rdquo;</li>
<li>Wypelnij formularz zgloszenia</li>
</ol>
<p>
Google rozpatruje zgloszenia w ciagu kilku dni. Nie wszystkie zgloszenia skutkuja usunieciem
&mdash; Google usunie opinie tylko jezeli naruszy zasady.
</p>
<h2 id="podsumowanie">Podsumowanie &mdash; plan dzialania</h2>
<ol>
<li>Sprawdz swoj profil firmy w Google (link w panelu po prawej)</li>
<li>Odpowiedz na wszystkie opinie, na ktore jeszcze nie odpowiedziales</li>
<li>Dodaj aktualne zdjecia firmy, uslug i realizacji</li>
<li>Przygotuj link do wystawiania opinii i zacznij go wysylac klientom</li>
<li>Wyznacz osobe odpowiedzialna za monitorowanie opinii (np. raz w tygodniu)</li>
</ol>
</div>
<div class="guide-sidebar">
{% if gbp_data %}
<div class="company-gbp-card">
<h3>
<svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" style="color: #4285f4;">
<path d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"/>
<path d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"/>
</svg>
{{ gbp_data.google_name or gbp_data.company_name }}
</h3>
{% if gbp_data.rating %}
<div class="gbp-stat">
<span class="gbp-stat-label">Ocena</span>
<span class="gbp-stat-value">
<span class="gbp-stars">{{ '★' * (gbp_data.rating | int) }}{{ '☆' * (5 - gbp_data.rating | int) }}</span>
{{ gbp_data.rating }}
</span>
</div>
{% endif %}
<div class="gbp-stat">
<span class="gbp-stat-label">Liczba opinii</span>
<span class="gbp-stat-value">{{ gbp_data.reviews_count }}</span>
</div>
<div class="gbp-stat">
<span class="gbp-stat-label">Zdjecia</span>
<span class="gbp-stat-value">{{ gbp_data.photos_count }}</span>
</div>
<div class="gbp-actions">
{% if gbp_data.write_review_url %}
<a href="{{ gbp_data.write_review_url }}" target="_blank" rel="noopener" class="gbp-action-btn primary">
<svg fill="currentColor" viewBox="0 0 24 24"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg>
Wystaw opinie
</a>
{% endif %}
{% if gbp_data.place_url %}
<a href="{{ gbp_data.place_url }}" target="_blank" rel="noopener" class="gbp-action-btn secondary">
<svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"/></svg>
Zobacz profil w Google
</a>
{% endif %}
{% if gbp_data.reviews_url %}
<a href="{{ gbp_data.reviews_url }}" target="_blank" rel="noopener" class="gbp-action-btn secondary">
<svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"/></svg>
Przeczytaj opinie
</a>
{% endif %}
{% if gbp_data.google_maps_url %}
<a href="{{ gbp_data.google_maps_url }}" target="_blank" rel="noopener" class="gbp-action-btn secondary">
<svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l5.447 2.724A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7"/></svg>
Otworz w Mapach
</a>
{% endif %}
</div>
</div>
{% else %}
<div class="no-gbp-card">
<h3>Brak danych z Google</h3>
<p>
{% if company %}
Nie znalezlismy wizytowki Google Business Profile dla firmy {{ company.name }}.
Jezeli Twoja firma ma profil w Google, skontaktuj sie z administratorem portalu.
{% else %}
Nie jestes przypisany do zadnej firmy. Skontaktuj sie z administratorem portalu,
aby przypisac Ci firme.
{% endif %}
</p>
</div>
{% endif %}
<div class="toc-card">
<h3>Spis tresci</h3>
<a href="#dlaczego">Dlaczego opinie sa wazne?</a>
<a href="#jak-zbierac">Jak zachecac do opinii?</a>
<a href="#dobra-opinia">Jak wyglada dobra opinia?</a>
<a href="#odpowiadanie">Jak odpowiadac na opinie?</a>
<a href="#zdjecia">Zdjecia w profilu Google</a>
<a href="#local-guide">Program Local Guides</a>
<a href="#zasady-google">Zasady Google</a>
<a href="#podsumowanie">Plan dzialania</a>
</div>
</div>
</div>
{% endblock %}

View File

@ -329,6 +329,8 @@
<div class="material-card {% if material.status == 'coming_soon' %}coming-soon{% else %}available{% endif %}" <div class="material-card {% if material.status == 'coming_soon' %}coming-soon{% else %}available{% endif %}"
{% if material.status == 'available' and material.video_url %} {% if material.status == 'available' and material.video_url %}
onclick="openVideo('{{ url_for('static', filename=material.video_url) }}', '{{ material.title }}')" onclick="openVideo('{{ url_for('static', filename=material.video_url) }}', '{{ material.title }}')"
{% elif material.status == 'available' and material.url %}
onclick="window.location.href='{{ url_for(material.url) }}'"
{% endif %}> {% endif %}>
{% if material.status == 'available' and material.type == 'video' %} {% if material.status == 'available' and material.type == 'video' %}