Professional training

Professional training

Formació professional - text

La formació professional capacita per exercir diverses professions de manera qualificada i segons cada sector.

S'organitza per famílies professionals:

  • Formació professional específica
  • Formació professional per a l’ocupació. Amb focus en les ocupacions especialment demandades al mercat laboral.
  • Sistema de qualificació professional. Per aconseguir una acreditació oficial a partir de l'experiència laboral, dels serveis prestats mitjançant una beca o voluntariat o la formació no reconeguda oficialment.
  • Programes de formació i inserció. Per a joves de 16 a 21 anys que no s'hagin graduat en l'ESO i que no estiguin ocupats. D'una banda, ofereixen la possibilitat de tornar incorporar-se al sistema educatiu, i de l'altra, adquirir l'aprenentatge imprescindible per accedir al mercat de treball.

Asset Publisher

An error occurred while processing the template.
The following has evaluated to null or missing:
==> enlaces  [in template "5469721879361428997#20119#325626" at line 157, column 61]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${enlaces}  [in template "5469721879361428997#20119#325626" at line 157, column 59]
----
1<style> 
2.results-list-formacio { 
3    background: #fff; 
4    border: 1px solid #CC5D27; 
5    border-radius: 10px 30px 10px 10px; 
6    display: flex; 
7    flex-wrap: wrap; 
8    padding: 20px; 
9    padding-right: 40px; 
10    position: relative; 
11    row-gap: 20px; 
12    transition: all 0.3s; 
13    -webkit-transition: all 0.3s; 
14
15 
16.select-label { 
17    font-size: 1.5em; 
18    /* Tamaño similar al de un h3 */ 
19    font-weight: bold; 
20    /* Negrita */ 
21    margin-bottom: 10px; 
22    /* Espacio debajo del label */ 
23    display: block; 
24    /* Asegura que el label esté en su propia línea */ 
25
26 
27.result-info-formacio { 
28    column-gap: 20px; 
29    display: flex; 
30    flex: 100%; 
31
32 
33.load-more-btn { 
34    background-color: #CC5D27; 
35    color: #fff; 
36    padding: 10px 20px; 
37    border-radius: 5px; 
38    text-decoration: none; 
39    display: inline-block; 
40    margin-top: 20px; 
41
42</style> 
43<#if entries?has_content> 
44    <#assign categoryList=[] /> 
45    <!-- Recorremos todas las entradas para obtener sus categorías --> 
46    <#list entries as entry> 
47        <#assign categories=entry.getCategories()![] /> 
48        <#if categories?has_content> 
49            <#list categories as category> 
50                <!-- Si la categoría no está en la lista, la agregamos --> 
51                <#if category.getName() != "Enlaces" && category.getName() != "Beques" && category.getName() != "Altres idiomes"  && category.getName() != "Accés a la universitat" && category.getName() != "Català" && category.getName() != "Castellà" && category.getName() != "Anglès"  &&  !(categoryList?seq_contains(category.getName()))>  
52                    <#assign categoryList=categoryList + [category.getName()] /> 
53                </#if> 
54            </#list> 
55        </#if> 
56    </#list> 
57		<#assign idioma = themeDisplay.getLocale().language /> 
58		<#assign entriesSize=entries?size /> 
59		<#assign selectLabel = "Escull una opció: " /> 
60		<#assign select = "Seleccionar" /> 
61		<#assign nonAvailableCategories = "No hi ha categories disponibles" /> 
62		<#assign enlaces = "Enllaços" /> 
63		<#assign masEnlaces = "Veure més enllaços" /> 
64		<#assign de = "de" /> 
65		<#if idioma == "es"> 
66			<#assign selectLabel = "Escoge una opción: " /> 
67			<#assign nonAvailableCategories = "No hay categorías disponibles" /> 
68			<#assign enlaces = "Enlaces" /> 
69			<#assign masEnlaces = "Ver más enlaces" /> 
70		<#elseif idioma == "en"> 
71			<#assign selectLabel = "Choose an option: " /> 
72			<#assign nonAvailableCategories = "No categories available" /> 
73			<#assign select = "Select" /> 
74			<#assign enlaces = "Links" /> 
75			<#assign masEnlaces = "See more links" /> 
76			<#assign de = "of" /> 
77		</#if> 
78		<!-- Mostrar el select con las categorías obtenidas --> 
79    <div class="wrapper medium mb-2"> 
80        <div class="results-list-formacio d-flex justify-content-center align-items-center"> 
81            <label for="categorySelect" class="select-label mr-2 pt-2">${selectLabel}</label> 
82            <select id="categorySelect"> 
83                <option value="">${select}</option> 
84                <#if categoryList?has_content> 
85                    <#list categoryList as categoryName> 
86                        <option value="${categoryName}"> 
87                            ${categoryName} 
88                        </option> 
89                    </#list> 
90                    <#else> 
91                        <option value="">${nonAvailableCategories}</option> 
92                </#if> 
93            </select> 
94        </div> 
95    </div> 
96    <!-- Mostrar las entradas --> 
97    <div class="wrapper medium"> 
98        <h3 class="title-form-enlace" id="title-form-enlace"></h3> 
99        <ul id="entries-list"> 
100            <#list entries as curEntry> 
101                <#assign assetRenderer=curEntry.getAssetRenderer() /> 
102                <#assign assetObject=assetRenderer.getAssetObject() /> 
103                <#assign categories=curEntry.getCategories()![] /> 
104                <#assign entryCategoryNames=[] /> 
105                <#list categories as category> 
106                    <#assign entryCategoryNames=entryCategoryNames + [category.getName()] /> 
107                </#list> 
108                <#assign conditionalStyle="display:block;" /> 
109                <#if (curEntry?counter>= 5)> 
110                    <#assign conditionalStyle="display:none;" /> 
111                </#if> 
112                <li class="my-4 entry" style="display:none" data-categories="${entryCategoryNames?join(',')}"> 
113                    <#if assetObject.getArticleId()??> 
114                        <@liferay_journal["journal-article"] 
115                            articleId=assetObject.getArticleId() 
116                            ddmTemplateKey="161002" 
117                            groupId=assetObject.getGroupId() /> 
118                    </#if> 
119                </li> 
120            </#list> 
121        </ul> 
122        <div class="centered small-padding-bottom loadMoreBtn" style="display:none;"> 
123            <a href="javascript:void(0);" class="button lm-button-white" style="width: 100%">${masEnlaces}</a> 
124        </div> 
125    </div> 
126</#if> 
127<script> 
128document.addEventListener('DOMContentLoaded', function() { 
129    let maxEntriesToShow = 5; 
130    let currentCategory = ''; 
131    const entries = document.querySelectorAll('.entry'); 
132    const loadMoreButton = document.querySelector('.loadMoreBtn'); 
133    const titleElement = document.querySelector('.title-form-enlace'); 
134    const categorySelect = document.getElementById('categorySelect'); 
135 
136    // Función para filtrar y mostrar las entradas según la categoría seleccionada 
137    function filterEntriesByCategory() { 
138        const selectedCategory = categorySelect.value.toLowerCase(); 
139        currentCategory = selectedCategory; 
140        let matchingEntries = []; 
141 
142        // Ocultar todas las entradas inicialmente 
143        entries.forEach(entry => entry.style.display = 'none'); 
144 
145        // Filtrar las entradas que coinciden con la categoría seleccionada 
146        entries.forEach(entry => { 
147            const entryCategories = entry.getAttribute('data-categories').split(','); 
148            if (entryCategories.some(category => category.toLowerCase() === selectedCategory)) { 
149                matchingEntries.push(entry); 
150
151        }); 
152 
153        // Mostrar solo las primeras 5 entradas de la categoría seleccionada 
154        matchingEntries.slice(0, maxEntriesToShow).forEach(entry => entry.style.display = 'block'); 
155 
156        // Actualizar el título con el conteo de entradas visibles 
157				titleElement.innerText = '${enlaces} (' + Math.min(maxEntriesToShow, matchingEntries.length) + ' ${de} ' + matchingEntries.length + ')'; 
158 
159        // Mostrar u ocultar el título 
160        titleElement.style.display = matchingEntries.length > 0 ? 'block' : 'none'; 
161 
162        // Mostrar u ocultar el botón "Ver más" 
163        loadMoreButton.style.display = matchingEntries.length > maxEntriesToShow ? 'block' : 'none'; 
164
165 
166    // Evento para cargar más entradas al hacer clic en "Ver más" 
167    loadMoreButton.addEventListener('click', function() { 
168        const matchingEntries = Array.from(entries).filter(entry => { 
169            const entryCategories = entry.getAttribute('data-categories').split(','); 
170            return entryCategories.some(category => category.toLowerCase() === currentCategory); 
171        }); 
172 
173        // Mostrar las siguientes 5 entradas de la categoría seleccionada 
174        const newEntriesToShow = maxEntriesToShow + 5; 
175        matchingEntries.slice(maxEntriesToShow, newEntriesToShow).forEach(entry => entry.style.display = 'block'); 
176 
177        // Actualizar el conteo 
178        maxEntriesToShow = newEntriesToShow; 
179        titleElement.innerText = '${enlaces} (' + Math.min(maxEntriesToShow, matchingEntries.length) + ' ${de} ' + matchingEntries.length + ')'; 
180 
181        // Ocultar el botón si ya se han mostrado todas las entradas 
182        if (maxEntriesToShow >= matchingEntries.length) { 
183            loadMoreButton.style.display = 'none'; 
184
185    }); 
186 
187    // Inicializar el filtro cuando cambia la selección del select 
188    categorySelect.addEventListener('change', function() { 
189        maxEntriesToShow = 5; 
190        filterEntriesByCategory(); 
191    }); 
192 
193    // Inicializar el filtro al cargar la página 
194    filterEntriesByCategory(); 
195}); 
196</script>