triển khai drupal để làm FE
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
const themeDir = path.join(__dirname, 'sis_theme');
|
||||
const templatesDir = path.join(themeDir, 'templates');
|
||||
const layoutDir = path.join(templatesDir, 'layout');
|
||||
const includesDir = path.join(templatesDir, 'includes');
|
||||
|
||||
// 1. Create includes directory
|
||||
if (!fs.existsSync(includesDir)) {
|
||||
fs.mkdirSync(includesDir, { recursive: true });
|
||||
}
|
||||
|
||||
// 2. Extract Header and Footer from page.html.twig
|
||||
const pageTwigPath = path.join(layoutDir, 'page.html.twig');
|
||||
let pageTwigContent = fs.readFileSync(pageTwigPath, 'utf8');
|
||||
|
||||
// Regex to extract header and footer
|
||||
const headerRegex = /(<!-- HEADER -->\s*<header class="header">[\s\S]*?<\/header>)/;
|
||||
const footerRegex = /(<!-- FOOTER -->\s*<footer class="footer">[\s\S]*?<\/footer>)/;
|
||||
|
||||
const headerMatch = pageTwigContent.match(headerRegex);
|
||||
const footerMatch = pageTwigContent.match(footerRegex);
|
||||
|
||||
if (headerMatch && footerMatch) {
|
||||
fs.writeFileSync(path.join(includesDir, 'header.html.twig'), headerMatch[1]);
|
||||
fs.writeFileSync(path.join(includesDir, 'footer.html.twig'), footerMatch[1]);
|
||||
|
||||
// Replace in page.html.twig
|
||||
pageTwigContent = pageTwigContent.replace(headerMatch[1], "{% include directory ~ '/templates/includes/header.html.twig' %}");
|
||||
pageTwigContent = pageTwigContent.replace(footerMatch[1], "{% include directory ~ '/templates/includes/footer.html.twig' %}");
|
||||
|
||||
fs.writeFileSync(pageTwigPath, pageTwigContent);
|
||||
console.log('✅ Extracted header and footer successfully.');
|
||||
} else {
|
||||
console.log('⚠️ Could not find header or footer in page.html.twig');
|
||||
}
|
||||
|
||||
// 3. Process UMASS_sample files
|
||||
const sampleDir = path.join(__dirname, 'UMASS_sample');
|
||||
const files = fs.readdirSync(sampleDir).filter(file => file.endsWith('.html'));
|
||||
|
||||
files.forEach(file => {
|
||||
const filePath = path.join(sampleDir, file);
|
||||
const htmlContent = fs.readFileSync(filePath, 'utf8');
|
||||
|
||||
const $ = cheerio.load(htmlContent);
|
||||
let mainContent = $('main').html();
|
||||
|
||||
if (!mainContent) {
|
||||
mainContent = '<div class="container" style="padding: 100px 0;">No main content found.</div>';
|
||||
}
|
||||
|
||||
// Generate a slug from filename
|
||||
let slug = file.toLowerCase()
|
||||
.replace(' _ umass amherst.html', '')
|
||||
.replace(' _ umass flex', '')
|
||||
.replace('umass ', '')
|
||||
.replace(' amherst', '')
|
||||
.replace(/[^a-z0-9]+/g, '-')
|
||||
.replace(/^-|-$/g, '');
|
||||
|
||||
if (slug === '' || slug === 'front' || slug === 'amherst') slug = 'front'; // To avoid conflict with default front
|
||||
|
||||
const newTwigContent = `{#
|
||||
/**
|
||||
* Page template for ${file}
|
||||
*/
|
||||
#}
|
||||
<div class="layout-container">
|
||||
{% include directory ~ '/templates/includes/header.html.twig' %}
|
||||
|
||||
<main role="main">
|
||||
${mainContent}
|
||||
</main>
|
||||
|
||||
{% include directory ~ '/templates/includes/footer.html.twig' %}
|
||||
</div>
|
||||
`;
|
||||
|
||||
// We write to page--[slug].html.twig
|
||||
const newFilePath = path.join(layoutDir, `page--${slug}.html.twig`);
|
||||
fs.writeFileSync(newFilePath, newTwigContent);
|
||||
console.log(`✅ Generated template: page--${slug}.html.twig`);
|
||||
});
|
||||
|
||||
console.log('All templates generated successfully!');
|
||||
Reference in New Issue
Block a user